Skip to content

Commit eba2d3d

Browse files
author
Al Viro
committed
get rid of non-advancing variants
mechanical change; will be further massaged in subsequent commits Reviewed-by: Jeff Layton <[email protected]> Signed-off-by: Al Viro <[email protected]>
1 parent b535899 commit eba2d3d

File tree

2 files changed

+20
-31
lines changed

2 files changed

+20
-31
lines changed

include/linux/uio.h

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,9 @@ void iov_iter_pipe(struct iov_iter *i, unsigned int direction, struct pipe_inode
247247
void iov_iter_discard(struct iov_iter *i, unsigned int direction, size_t count);
248248
void iov_iter_xarray(struct iov_iter *i, unsigned int direction, struct xarray *xarray,
249249
loff_t start, size_t count);
250-
ssize_t iov_iter_get_pages(struct iov_iter *i, struct page **pages,
250+
ssize_t iov_iter_get_pages2(struct iov_iter *i, struct page **pages,
251251
size_t maxsize, unsigned maxpages, size_t *start);
252-
ssize_t iov_iter_get_pages_alloc(struct iov_iter *i, struct page ***pages,
252+
ssize_t iov_iter_get_pages_alloc2(struct iov_iter *i, struct page ***pages,
253253
size_t maxsize, size_t *start);
254254
int iov_iter_npages(const struct iov_iter *i, int maxpages);
255255
void iov_iter_restore(struct iov_iter *i, struct iov_iter_state *state);
@@ -351,24 +351,4 @@ static inline void iov_iter_ubuf(struct iov_iter *i, unsigned int direction,
351351
};
352352
}
353353

354-
static inline ssize_t iov_iter_get_pages2(struct iov_iter *i, struct page **pages,
355-
size_t maxsize, unsigned maxpages, size_t *start)
356-
{
357-
ssize_t res = iov_iter_get_pages(i, pages, maxsize, maxpages, start);
358-
359-
if (res >= 0)
360-
iov_iter_advance(i, res);
361-
return res;
362-
}
363-
364-
static inline ssize_t iov_iter_get_pages_alloc2(struct iov_iter *i, struct page ***pages,
365-
size_t maxsize, size_t *start)
366-
{
367-
ssize_t res = iov_iter_get_pages_alloc(i, pages, maxsize, start);
368-
369-
if (res >= 0)
370-
iov_iter_advance(i, res);
371-
return res;
372-
}
373-
374354
#endif

lib/iov_iter.c

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1328,6 +1328,7 @@ static ssize_t pipe_get_pages(struct iov_iter *i,
13281328
left -= PAGE_SIZE - off;
13291329
if (left <= 0) {
13301330
buf->len += maxsize;
1331+
iov_iter_advance(i, maxsize);
13311332
return maxsize;
13321333
}
13331334
buf->len = PAGE_SIZE;
@@ -1347,7 +1348,9 @@ static ssize_t pipe_get_pages(struct iov_iter *i,
13471348
}
13481349
if (!npages)
13491350
return -EFAULT;
1350-
return maxsize - left;
1351+
maxsize -= left;
1352+
iov_iter_advance(i, maxsize);
1353+
return maxsize;
13511354
}
13521355

13531356
static ssize_t iter_xarray_populate_pages(struct page **pages, struct xarray *xa,
@@ -1397,7 +1400,9 @@ static ssize_t iter_xarray_get_pages(struct iov_iter *i,
13971400
if (nr == 0)
13981401
return 0;
13991402

1400-
return min_t(size_t, nr * PAGE_SIZE - offset, maxsize);
1403+
maxsize = min_t(size_t, nr * PAGE_SIZE - offset, maxsize);
1404+
iov_iter_advance(i, maxsize);
1405+
return maxsize;
14011406
}
14021407

14031408
/* must be done on non-empty ITER_UBUF or ITER_IOVEC one */
@@ -1469,7 +1474,9 @@ static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,
14691474
res = get_user_pages_fast(addr, n, gup_flags, *pages);
14701475
if (unlikely(res <= 0))
14711476
return res;
1472-
return min_t(size_t, maxsize, res * PAGE_SIZE - *start);
1477+
maxsize = min_t(size_t, maxsize, res * PAGE_SIZE - *start);
1478+
iov_iter_advance(i, maxsize);
1479+
return maxsize;
14731480
}
14741481
if (iov_iter_is_bvec(i)) {
14751482
struct page **p;
@@ -1481,8 +1488,10 @@ static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,
14811488
return -ENOMEM;
14821489
p = *pages;
14831490
for (int k = 0; k < n; k++)
1484-
get_page(*p++ = page++);
1485-
return min_t(size_t, maxsize, n * PAGE_SIZE - *start);
1491+
get_page(p[k] = page + k);
1492+
maxsize = min_t(size_t, maxsize, n * PAGE_SIZE - *start);
1493+
iov_iter_advance(i, maxsize);
1494+
return maxsize;
14861495
}
14871496
if (iov_iter_is_pipe(i))
14881497
return pipe_get_pages(i, pages, maxsize, maxpages, start);
@@ -1491,7 +1500,7 @@ static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,
14911500
return -EFAULT;
14921501
}
14931502

1494-
ssize_t iov_iter_get_pages(struct iov_iter *i,
1503+
ssize_t iov_iter_get_pages2(struct iov_iter *i,
14951504
struct page **pages, size_t maxsize, unsigned maxpages,
14961505
size_t *start)
14971506
{
@@ -1501,9 +1510,9 @@ ssize_t iov_iter_get_pages(struct iov_iter *i,
15011510

15021511
return __iov_iter_get_pages_alloc(i, &pages, maxsize, maxpages, start);
15031512
}
1504-
EXPORT_SYMBOL(iov_iter_get_pages);
1513+
EXPORT_SYMBOL(iov_iter_get_pages2);
15051514

1506-
ssize_t iov_iter_get_pages_alloc(struct iov_iter *i,
1515+
ssize_t iov_iter_get_pages_alloc2(struct iov_iter *i,
15071516
struct page ***pages, size_t maxsize,
15081517
size_t *start)
15091518
{
@@ -1518,7 +1527,7 @@ ssize_t iov_iter_get_pages_alloc(struct iov_iter *i,
15181527
}
15191528
return len;
15201529
}
1521-
EXPORT_SYMBOL(iov_iter_get_pages_alloc);
1530+
EXPORT_SYMBOL(iov_iter_get_pages_alloc2);
15221531

15231532
size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum,
15241533
struct iov_iter *i)

0 commit comments

Comments
 (0)