fuse: convert readdir to use folios
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>
This commit is contained in:
committed by
Miklos Szeredi
parent
c1e4862b13
commit
02b78c7a7a
+11
-10
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user