Commit 448895df authored by Joanne Koong's avatar Joanne Koong Committed by Miklos Szeredi
Browse files

fuse: convert retrieves to use folios



Convert retrieve requests to use folios instead of pages.

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 ac1cf6e3
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -1728,7 +1728,7 @@ static void fuse_retrieve_end(struct fuse_mount *fm, struct fuse_args *args,
	struct fuse_retrieve_args *ra =
		container_of(args, typeof(*ra), ap.args);

	release_pages(ra->ap.pages, ra->ap.num_pages);
	release_pages(ra->ap.folios, ra->ap.num_folios);
	kfree(ra);
}

@@ -1742,7 +1742,7 @@ static int fuse_retrieve(struct fuse_mount *fm, struct inode *inode,
	unsigned int num;
	unsigned int offset;
	size_t total_len = 0;
	unsigned int num_pages;
	unsigned int num_pages, cur_pages = 0;
	struct fuse_conn *fc = fm->fc;
	struct fuse_retrieve_args *ra;
	size_t args_size = sizeof(*ra);
@@ -1761,15 +1761,16 @@ static int fuse_retrieve(struct fuse_mount *fm, struct inode *inode,
	num_pages = (num + offset + PAGE_SIZE - 1) >> PAGE_SHIFT;
	num_pages = min(num_pages, fc->max_pages);

	args_size += num_pages * (sizeof(ap->pages[0]) + sizeof(ap->descs[0]));
	args_size += num_pages * (sizeof(ap->folios[0]) + sizeof(ap->folio_descs[0]));

	ra = kzalloc(args_size, GFP_KERNEL);
	if (!ra)
		return -ENOMEM;

	ap = &ra->ap;
	ap->pages = (void *) (ra + 1);
	ap->descs = (void *) (ap->pages + num_pages);
	ap->folios = (void *) (ra + 1);
	ap->folio_descs = (void *) (ap->folios + num_pages);
	ap->uses_folios = true;

	args = &ap->args;
	args->nodeid = outarg->nodeid;
@@ -1780,7 +1781,7 @@ static int fuse_retrieve(struct fuse_mount *fm, struct inode *inode,

	index = outarg->offset >> PAGE_SHIFT;

	while (num && ap->num_pages < num_pages) {
	while (num && cur_pages < num_pages) {
		struct folio *folio;
		unsigned int this_num;

@@ -1789,10 +1790,11 @@ static int fuse_retrieve(struct fuse_mount *fm, struct inode *inode,
			break;

		this_num = min_t(unsigned, num, PAGE_SIZE - offset);
		ap->pages[ap->num_pages] = &folio->page;
		ap->descs[ap->num_pages].offset = offset;
		ap->descs[ap->num_pages].length = this_num;
		ap->num_pages++;
		ap->folios[ap->num_folios] = folio;
		ap->folio_descs[ap->num_folios].offset = offset;
		ap->folio_descs[ap->num_folios].length = this_num;
		ap->num_folios++;
		cur_pages++;

		offset = 0;
		num -= this_num;