@@ -251,12 +251,12 @@ long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
251
251
BUILD_BUG_ON (sizeof (struct fuse_ioctl_iovec ) * FUSE_IOCTL_MAX_IOV > PAGE_SIZE );
252
252
253
253
err = - ENOMEM ;
254
- ap .pages = fuse_pages_alloc (fm -> fc -> max_pages , GFP_KERNEL , & ap .descs );
254
+ ap .folios = fuse_folios_alloc (fm -> fc -> max_pages , GFP_KERNEL , & ap .folio_descs );
255
255
iov_page = (struct iovec * ) __get_free_page (GFP_KERNEL );
256
- if (!ap .pages || !iov_page )
256
+ if (!ap .folios || !iov_page )
257
257
goto out ;
258
258
259
- fuse_page_descs_length_init (ap .descs , 0 , fm -> fc -> max_pages );
259
+ fuse_folio_descs_length_init (ap .folio_descs , 0 , fm -> fc -> max_pages );
260
260
261
261
/*
262
262
* If restricted, initialize IO parameters as encoded in @cmd.
@@ -306,14 +306,14 @@ long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
306
306
err = - ENOMEM ;
307
307
if (max_pages > fm -> fc -> max_pages )
308
308
goto out ;
309
- while (ap .num_pages < max_pages ) {
310
- ap .pages [ap .num_pages ] = alloc_page (GFP_KERNEL | __GFP_HIGHMEM );
311
- if (!ap .pages [ap .num_pages ])
309
+ ap .uses_folios = true;
310
+ while (ap .num_folios < max_pages ) {
311
+ ap .folios [ap .num_folios ] = folio_alloc (GFP_KERNEL | __GFP_HIGHMEM , 0 );
312
+ if (!ap .folios [ap .num_folios ])
312
313
goto out ;
313
- ap .num_pages ++ ;
314
+ ap .num_folios ++ ;
314
315
}
315
316
316
-
317
317
/* okay, let's send it to the client */
318
318
ap .args .opcode = FUSE_IOCTL ;
319
319
ap .args .nodeid = ff -> nodeid ;
@@ -327,8 +327,8 @@ long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
327
327
328
328
err = - EFAULT ;
329
329
iov_iter_init (& ii , ITER_SOURCE , in_iov , in_iovs , in_size );
330
- for (i = 0 ; iov_iter_count (& ii ) && !WARN_ON (i >= ap .num_pages ); i ++ ) {
331
- c = copy_page_from_iter (ap .pages [i ], 0 , PAGE_SIZE , & ii );
330
+ for (i = 0 ; iov_iter_count (& ii ) && !WARN_ON (i >= ap .num_folios ); i ++ ) {
331
+ c = copy_folio_from_iter (ap .folios [i ], 0 , PAGE_SIZE , & ii );
332
332
if (c != PAGE_SIZE && iov_iter_count (& ii ))
333
333
goto out ;
334
334
}
@@ -366,7 +366,7 @@ long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
366
366
in_iovs + out_iovs > FUSE_IOCTL_MAX_IOV )
367
367
goto out ;
368
368
369
- vaddr = kmap_local_page (ap .pages [0 ]);
369
+ vaddr = kmap_local_folio (ap .folios [0 ], 0 );
370
370
err = fuse_copy_ioctl_iovec (fm -> fc , iov_page , vaddr ,
371
371
transferred , in_iovs + out_iovs ,
372
372
(flags & FUSE_IOCTL_COMPAT ) != 0 );
@@ -394,17 +394,17 @@ long fuse_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg,
394
394
395
395
err = - EFAULT ;
396
396
iov_iter_init (& ii , ITER_DEST , out_iov , out_iovs , transferred );
397
- for (i = 0 ; iov_iter_count (& ii ) && !WARN_ON (i >= ap .num_pages ); i ++ ) {
398
- c = copy_page_to_iter (ap .pages [i ], 0 , PAGE_SIZE , & ii );
397
+ for (i = 0 ; iov_iter_count (& ii ) && !WARN_ON (i >= ap .num_folios ); i ++ ) {
398
+ c = copy_folio_to_iter (ap .folios [i ], 0 , PAGE_SIZE , & ii );
399
399
if (c != PAGE_SIZE && iov_iter_count (& ii ))
400
400
goto out ;
401
401
}
402
402
err = 0 ;
403
403
out :
404
404
free_page ((unsigned long ) iov_page );
405
- while (ap .num_pages )
406
- __free_page (ap .pages [-- ap .num_pages ]);
407
- kfree (ap .pages );
405
+ while (ap .num_folios )
406
+ folio_put (ap .folios [-- ap .num_folios ]);
407
+ kfree (ap .folios );
408
408
409
409
return err ? err : outarg .result ;
410
410
}
0 commit comments