fuse: convert readdir to use folios
authorJoanne Koong <joannelkoong@gmail.com>
Thu, 24 Oct 2024 17:18:01 +0000 (10:18 -0700)
committerMiklos Szeredi <mszeredi@redhat.com>
Tue, 5 Nov 2024 10:14:32 +0000 (11:14 +0100)
Convert readdir requests to use a folio instead of a page.

No functional changes.

Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/readdir.c

index 0377b6d..fd0eff1 100644 (file)
@@ -331,24 +331,25 @@ static int fuse_readdir_uncached(struct file *file, struct dir_context *ctx)
 {
        int plus;
        ssize_t res;
-       struct page *page;
+       struct folio *folio;
        struct inode *inode = file_inode(file);
        struct fuse_mount *fm = get_fuse_mount(inode);
        struct fuse_io_args ia = {};
        struct fuse_args_pages *ap = &ia.ap;
-       struct fuse_page_desc desc = { .length = PAGE_SIZE };
+       struct fuse_folio_desc desc = { .length = PAGE_SIZE };
        u64 attr_version = 0;
        bool locked;
 
-       page = alloc_page(GFP_KERNEL);
-       if (!page)
+       folio = folio_alloc(GFP_KERNEL, 0);
+       if (!folio)
                return -ENOMEM;
 
        plus = fuse_use_readdirplus(inode, ctx);
        ap->args.out_pages = true;
-       ap->num_pages = 1;
-       ap->pages = &page;
-       ap->descs = &desc;
+       ap->uses_folios = true;
+       ap->num_folios = 1;
+       ap->folios = &folio;
+       ap->folio_descs = &desc;
        if (plus) {
                attr_version = fuse_get_attr_version(fm->fc);
                fuse_read_args_fill(&ia, file, ctx->pos, PAGE_SIZE,
@@ -367,15 +368,15 @@ static int fuse_readdir_uncached(struct file *file, struct dir_context *ctx)
                        if (ff->open_flags & FOPEN_CACHE_DIR)
                                fuse_readdir_cache_end(file, ctx->pos);
                } else if (plus) {
-                       res = parse_dirplusfile(page_address(page), res,
+                       res = parse_dirplusfile(folio_address(folio), res,
                                                file, ctx, attr_version);
                } else {
-                       res = parse_dirfile(page_address(page), res, file,
+                       res = parse_dirfile(folio_address(folio), res, file,
                                            ctx);
                }
        }
 
-       __free_page(page);
+       folio_put(folio);
        fuse_invalidate_atime(inode);
        return res;
 }