And no such iterator in mainstream kernel as well => good reason to drop it.
To_merge: 3f4f3e9c9d8e ("mm: extend generic iov iterator API") Signed-off-by: Konstantin Khorenko <khore...@virtuozzo.com> --- include/linux/fs.h | 26 --------- mm/iov-iter.c | 141 --------------------------------------------- 2 files changed, 167 deletions(-) diff --git a/include/linux/fs.h b/include/linux/fs.h index d4c143fa7212..f30f19fa0b33 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -337,7 +337,6 @@ enum iter_type { ITER_BVEC = 16, /* ii_bvec_ops */ ITER_PIPE = 32, /* ms type, not used in vzkernel */ ITER_DISCARD = 64, /* ms type, not used in vzkernel */ - ITER_PAGE = 128, /* ii_page_ops, currently not used */ ITER_PLAIN = 256, /* ii_plain_ops */ ITER_BAD = 512, /* ii_bad_ops */ }; @@ -361,7 +360,6 @@ struct iov_iter { }; extern struct iov_iter_ops ii_bvec_ops; -extern struct iov_iter_ops ii_page_ops; extern struct iov_iter_ops ii_iovec_ops; extern struct iov_iter_ops ii_bad_ops; extern struct iov_iter_ops ii_plain_ops; @@ -383,8 +381,6 @@ static inline struct iov_iter_ops *iov_iter_get_ops(const struct iov_iter *iter) case ITER_DISCARD: return lalala; */ - case ITER_PAGE: - return &ii_page_ops; case ITER_PLAIN: return &ii_plain_ops; case ITER_BAD: @@ -516,28 +512,6 @@ static inline struct bio_vec *iov_iter_bvec(struct iov_iter *i) return (struct bio_vec *)i->data; } -static inline void iov_iter_init_page(struct iov_iter *i, - struct page *page, - size_t count, size_t written) -{ - i->type = ITER_PAGE; - i->data = (unsigned long)page; - i->nr_segs = 1; - i->iov_offset = 0; - i->count = count + written; - - iov_iter_advance(i, written); -} -static inline int iov_iter_has_page(struct iov_iter *i) -{ - return i->type == ITER_PAGE; -} -static inline struct page *iov_iter_page(struct iov_iter *i) -{ - BUG_ON(!iov_iter_has_page(i)); - return (struct page *)i->data; -} - static inline void iov_iter_init_plain(struct iov_iter *i, void *data, size_t count, size_t written) { diff --git a/mm/iov-iter.c b/mm/iov-iter.c index 04d92fb9bfcf..99ededb7f2cc 100644 --- a/mm/iov-iter.c +++ b/mm/iov-iter.c @@ -626,147 +626,6 @@ struct iov_iter_ops ii_bvec_ops = { }; EXPORT_SYMBOL(ii_bvec_ops); -/* Functions to get on with single page */ - -static void *ii_page_kmap_atomic(const struct iov_iter *iter, void **bp, - size_t *len) -{ - struct page *page = (struct page *)iter->data; - void *map; - - BUG_ON(iter->iov_offset >= PAGE_SIZE); - map = kmap_atomic(page); - *bp = map + iter->iov_offset; - *len = iter->count; - return map; -} - -static struct page *ii_page_kmap(const struct iov_iter *iter, void **bp, - size_t *len) -{ - struct page *page = (struct page *)iter->data; - void *map; - - BUG_ON(iter->iov_offset >= PAGE_SIZE); - map = kmap(page); - *bp = map + iter->iov_offset; - *len = iter->count; - return page; -} - -static struct page *ii_page_get_page(const struct iov_iter *iter, size_t *off, - size_t *len) -{ - struct page *page = (struct page *)iter->data; - - if (!get_page_is_safe(page)) - return NULL; - - *off = iter->iov_offset; - *len = iter->count; - get_page(page); - - return page; -} - -static size_t page_copy_tofrom_page(struct iov_iter *iter, struct page *page, - unsigned long page_offset, size_t bytes, - int topage) -{ - struct page *ipage = (struct page *)iter->data; - size_t ipage_offset = iter->iov_offset; - void *ipage_map; - void *page_map; - - BUG_ON(bytes > iter->count); - BUG_ON(bytes > PAGE_SIZE - ipage_offset); - BUG_ON(ipage_offset >= PAGE_SIZE); - - page_map = kmap_atomic(page); - ipage_map = kmap_atomic(ipage); - - if (topage) - memcpy(page_map + page_offset, - ipage_map + ipage_offset, - bytes); - else - memcpy(ipage_map + ipage_offset, - page_map + page_offset, - bytes); - - kunmap_atomic(ipage_map); - kunmap_atomic(page_map); - - return bytes; -} - -size_t ii_page_copy_to_user_atomic(struct page *page, struct iov_iter *i, - unsigned long offset, size_t bytes) -{ - return page_copy_tofrom_page(i, page, offset, bytes, 0); -} -size_t ii_page_copy_to_user(struct page *page, struct iov_iter *i, - unsigned long offset, size_t bytes) -{ - return page_copy_tofrom_page(i, page, offset, bytes, 0); -} -size_t ii_page_copy_from_user_atomic(struct page *page, struct iov_iter *i, - unsigned long offset, size_t bytes) -{ - return page_copy_tofrom_page(i, page, offset, bytes, 1); -} -size_t ii_page_copy_from_user(struct page *page, struct iov_iter *i, - unsigned long offset, size_t bytes) -{ - return page_copy_tofrom_page(i, page, offset, bytes, 1); -} - -void ii_page_advance(struct iov_iter *i, size_t bytes) -{ - BUG_ON(i->count < bytes); - BUG_ON(i->iov_offset >= PAGE_SIZE); - BUG_ON(bytes > PAGE_SIZE - i->iov_offset); - - i->iov_offset += bytes; - i->count -= bytes; -} - -/* - * pages pointed to by bio_vecs are always pinned. - */ -int ii_page_fault_in_readable(struct iov_iter *i, size_t bytes) -{ - return 0; -} - -size_t ii_page_single_seg_count(const struct iov_iter *i) -{ - BUG_ON(i->nr_segs != 1); - - return i->count; -} - -static int ii_page_shorten(struct iov_iter *i, size_t count) -{ - return -EINVAL; -} - -struct iov_iter_ops ii_page_ops = { - .ii_copy_to_user_atomic = ii_page_copy_to_user_atomic, - .ii_copy_to_user = ii_page_copy_to_user, - .ii_copy_from_user_atomic = ii_page_copy_from_user_atomic, - .ii_copy_from_user = ii_page_copy_from_user, - .ii_advance = ii_page_advance, - .ii_fault_in_readable = ii_page_fault_in_readable, - .ii_single_seg_count = ii_page_single_seg_count, - .ii_shorten = ii_page_shorten, - .ii_kmap_atomic = ii_page_kmap_atomic, - .ii_kmap = ii_page_kmap, - .ii_get_page = ii_page_get_page, - -}; -EXPORT_SYMBOL(ii_page_ops); - static inline size_t ii_bad_copy_to_user_atomic(struct page *p, struct iov_iter *i, unsigned long off, size_t cnt) -- 2.24.3 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel