void iov_iter_discard(struct iov_iter *i, unsigned int direction, size_t count);
 void iov_iter_xarray(struct iov_iter *i, unsigned int direction, struct xarray *xarray,
                     loff_t start, size_t count);
-ssize_t iov_iter_get_pages(struct iov_iter *i, struct page **pages,
+ssize_t iov_iter_get_pages2(struct iov_iter *i, struct page **pages,
                        size_t maxsize, unsigned maxpages, size_t *start);
-ssize_t iov_iter_get_pages_alloc(struct iov_iter *i, struct page ***pages,
+ssize_t iov_iter_get_pages_alloc2(struct iov_iter *i, struct page ***pages,
                        size_t maxsize, size_t *start);
 int iov_iter_npages(const struct iov_iter *i, int maxpages);
 void iov_iter_restore(struct iov_iter *i, struct iov_iter_state *state);
        };
 }
 
-static inline ssize_t iov_iter_get_pages2(struct iov_iter *i, struct page **pages,
-                       size_t maxsize, unsigned maxpages, size_t *start)
-{
-       ssize_t res = iov_iter_get_pages(i, pages, maxsize, maxpages, start);
-
-       if (res >= 0)
-               iov_iter_advance(i, res);
-       return res;
-}
-
-static inline ssize_t iov_iter_get_pages_alloc2(struct iov_iter *i, struct page ***pages,
-                       size_t maxsize, size_t *start)
-{
-       ssize_t res = iov_iter_get_pages_alloc(i, pages, maxsize, start);
-
-       if (res >= 0)
-               iov_iter_advance(i, res);
-       return res;
-}
-
 #endif
 
                left -= PAGE_SIZE - off;
                if (left <= 0) {
                        buf->len += maxsize;
+                       iov_iter_advance(i, maxsize);
                        return maxsize;
                }
                buf->len = PAGE_SIZE;
        }
        if (!npages)
                return -EFAULT;
-       return maxsize - left;
+       maxsize -= left;
+       iov_iter_advance(i, maxsize);
+       return maxsize;
 }
 
 static ssize_t iter_xarray_populate_pages(struct page **pages, struct xarray *xa,
        if (nr == 0)
                return 0;
 
-       return min_t(size_t, nr * PAGE_SIZE - offset, maxsize);
+       maxsize = min_t(size_t, nr * PAGE_SIZE - offset, maxsize);
+       iov_iter_advance(i, maxsize);
+       return maxsize;
 }
 
 /* must be done on non-empty ITER_UBUF or ITER_IOVEC one */
                res = get_user_pages_fast(addr, n, gup_flags, *pages);
                if (unlikely(res <= 0))
                        return res;
-               return min_t(size_t, maxsize, res * PAGE_SIZE - *start);
+               maxsize = min_t(size_t, maxsize, res * PAGE_SIZE - *start);
+               iov_iter_advance(i, maxsize);
+               return maxsize;
        }
        if (iov_iter_is_bvec(i)) {
                struct page **p;
                        return -ENOMEM;
                p = *pages;
                for (int k = 0; k < n; k++)
-                       get_page(*p++ = page++);
-               return min_t(size_t, maxsize, n * PAGE_SIZE - *start);
+                       get_page(p[k] = page + k);
+               maxsize = min_t(size_t, maxsize, n * PAGE_SIZE - *start);
+               iov_iter_advance(i, maxsize);
+               return maxsize;
        }
        if (iov_iter_is_pipe(i))
                return pipe_get_pages(i, pages, maxsize, maxpages, start);
        return -EFAULT;
 }
 
-ssize_t iov_iter_get_pages(struct iov_iter *i,
+ssize_t iov_iter_get_pages2(struct iov_iter *i,
                   struct page **pages, size_t maxsize, unsigned maxpages,
                   size_t *start)
 {
 
        return __iov_iter_get_pages_alloc(i, &pages, maxsize, maxpages, start);
 }
-EXPORT_SYMBOL(iov_iter_get_pages);
+EXPORT_SYMBOL(iov_iter_get_pages2);
 
-ssize_t iov_iter_get_pages_alloc(struct iov_iter *i,
+ssize_t iov_iter_get_pages_alloc2(struct iov_iter *i,
                   struct page ***pages, size_t maxsize,
                   size_t *start)
 {
        }
        return len;
 }
-EXPORT_SYMBOL(iov_iter_get_pages_alloc);
+EXPORT_SYMBOL(iov_iter_get_pages_alloc2);
 
 size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum,
                               struct iov_iter *i)