@@ -1304,10 +1304,9 @@ static ssize_t pipe_get_pages(struct iov_iter *i,
1304
1304
struct page * * * pages , size_t maxsize , unsigned maxpages ,
1305
1305
size_t * start )
1306
1306
{
1307
- struct pipe_inode_info * pipe = i -> pipe ;
1308
- unsigned int npages , off , count ;
1307
+ unsigned int npages , count , off , chunk ;
1309
1308
struct page * * p ;
1310
- ssize_t left ;
1309
+ size_t left ;
1311
1310
1312
1311
if (!sanity (i ))
1313
1312
return - EFAULT ;
@@ -1319,38 +1318,16 @@ static ssize_t pipe_get_pages(struct iov_iter *i,
1319
1318
if (!count )
1320
1319
return - ENOMEM ;
1321
1320
p = * pages ;
1322
- left = maxsize ;
1323
- npages = 0 ;
1324
- if (off ) {
1325
- struct pipe_buffer * buf = pipe_buf (pipe , pipe -> head - 1 );
1326
-
1327
- get_page (* p ++ = buf -> page );
1328
- left -= PAGE_SIZE - off ;
1329
- if (left <= 0 ) {
1330
- buf -> len += maxsize ;
1331
- iov_iter_advance (i , maxsize );
1332
- return maxsize ;
1333
- }
1334
- buf -> len = PAGE_SIZE ;
1335
- npages = 1 ;
1336
- }
1337
- for ( ; npages < count ; npages ++ ) {
1338
- struct page * page ;
1339
- unsigned int size = min_t (ssize_t , left , PAGE_SIZE );
1340
-
1341
- if (pipe_full (pipe -> head , pipe -> tail , pipe -> max_usage ))
1342
- break ;
1343
- page = push_anon (pipe , size );
1321
+ for (npages = 0 , left = maxsize ; npages < count ; npages ++ , left -= chunk ) {
1322
+ struct page * page = append_pipe (i , left , & off );
1344
1323
if (!page )
1345
1324
break ;
1325
+ chunk = min_t (size_t , left , PAGE_SIZE - off );
1346
1326
get_page (* p ++ = page );
1347
- left -= size ;
1348
1327
}
1349
1328
if (!npages )
1350
1329
return - EFAULT ;
1351
- maxsize -= left ;
1352
- iov_iter_advance (i , maxsize );
1353
- return maxsize ;
1330
+ return maxsize - left ;
1354
1331
}
1355
1332
1356
1333
static ssize_t iter_xarray_populate_pages (struct page * * pages , struct xarray * xa ,
0 commit comments