Commit 02b78c7a authored by Joanne Koong's avatar Joanne Koong Committed by Miklos Szeredi
Browse files

fuse: convert readdir to use folios



Convert readdir requests to use a folio instead of a page.

No functional changes.

Signed-off-by: default avatarJoanne Koong <joannelkoong@gmail.com>
Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
Signed-off-by: default avatarMiklos Szeredi <mszeredi@redhat.com>
parent c1e4862b
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -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;
}