@@ -1328,6 +1328,7 @@ static ssize_t pipe_get_pages(struct iov_iter *i,
1328
1328
left -= PAGE_SIZE - off ;
1329
1329
if (left <= 0 ) {
1330
1330
buf -> len += maxsize ;
1331
+ iov_iter_advance (i , maxsize );
1331
1332
return maxsize ;
1332
1333
}
1333
1334
buf -> len = PAGE_SIZE ;
@@ -1347,7 +1348,9 @@ static ssize_t pipe_get_pages(struct iov_iter *i,
1347
1348
}
1348
1349
if (!npages )
1349
1350
return - EFAULT ;
1350
- return maxsize - left ;
1351
+ maxsize -= left ;
1352
+ iov_iter_advance (i , maxsize );
1353
+ return maxsize ;
1351
1354
}
1352
1355
1353
1356
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,
1397
1400
if (nr == 0 )
1398
1401
return 0 ;
1399
1402
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 ;
1401
1406
}
1402
1407
1403
1408
/* 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,
1469
1474
res = get_user_pages_fast (addr , n , gup_flags , * pages );
1470
1475
if (unlikely (res <= 0 ))
1471
1476
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 ;
1473
1480
}
1474
1481
if (iov_iter_is_bvec (i )) {
1475
1482
struct page * * p ;
@@ -1481,8 +1488,10 @@ static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,
1481
1488
return - ENOMEM ;
1482
1489
p = * pages ;
1483
1490
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 ;
1486
1495
}
1487
1496
if (iov_iter_is_pipe (i ))
1488
1497
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,
1491
1500
return - EFAULT ;
1492
1501
}
1493
1502
1494
- ssize_t iov_iter_get_pages (struct iov_iter * i ,
1503
+ ssize_t iov_iter_get_pages2 (struct iov_iter * i ,
1495
1504
struct page * * pages , size_t maxsize , unsigned maxpages ,
1496
1505
size_t * start )
1497
1506
{
@@ -1501,9 +1510,9 @@ ssize_t iov_iter_get_pages(struct iov_iter *i,
1501
1510
1502
1511
return __iov_iter_get_pages_alloc (i , & pages , maxsize , maxpages , start );
1503
1512
}
1504
- EXPORT_SYMBOL (iov_iter_get_pages );
1513
+ EXPORT_SYMBOL (iov_iter_get_pages2 );
1505
1514
1506
- ssize_t iov_iter_get_pages_alloc (struct iov_iter * i ,
1515
+ ssize_t iov_iter_get_pages_alloc2 (struct iov_iter * i ,
1507
1516
struct page * * * pages , size_t maxsize ,
1508
1517
size_t * start )
1509
1518
{
@@ -1518,7 +1527,7 @@ ssize_t iov_iter_get_pages_alloc(struct iov_iter *i,
1518
1527
}
1519
1528
return len ;
1520
1529
}
1521
- EXPORT_SYMBOL (iov_iter_get_pages_alloc );
1530
+ EXPORT_SYMBOL (iov_iter_get_pages_alloc2 );
1522
1531
1523
1532
size_t csum_and_copy_from_iter (void * addr , size_t bytes , __wsum * csum ,
1524
1533
struct iov_iter * i )
0 commit comments