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

fuse: convert cuse to use folios



Convert cuse 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 29279e1d
Loading
Loading
Loading
Loading
+17 −15
Original line number Diff line number Diff line
@@ -303,8 +303,8 @@ struct cuse_init_args {
	struct fuse_args_pages ap;
	struct cuse_init_in in;
	struct cuse_init_out out;
	struct page *page;
	struct fuse_page_desc desc;
	struct folio *folio;
	struct fuse_folio_desc desc;
};

/**
@@ -326,7 +326,7 @@ static void cuse_process_init_reply(struct fuse_mount *fm,
	struct fuse_args_pages *ap = &ia->ap;
	struct cuse_conn *cc = fc_to_cc(fc), *pos;
	struct cuse_init_out *arg = &ia->out;
	struct page *page = ap->pages[0];
	struct folio *folio = ap->folios[0];
	struct cuse_devinfo devinfo = { };
	struct device *dev;
	struct cdev *cdev;
@@ -343,7 +343,7 @@ static void cuse_process_init_reply(struct fuse_mount *fm,
	/* parse init reply */
	cc->unrestricted_ioctl = arg->flags & CUSE_UNRESTRICTED_IOCTL;

	rc = cuse_parse_devinfo(page_address(page), ap->args.out_args[1].size,
	rc = cuse_parse_devinfo(folio_address(folio), ap->args.out_args[1].size,
				&devinfo);
	if (rc)
		goto err;
@@ -411,7 +411,7 @@ static void cuse_process_init_reply(struct fuse_mount *fm,
	kobject_uevent(&dev->kobj, KOBJ_ADD);
out:
	kfree(ia);
	__free_page(page);
	folio_put(folio);
	return;

err_cdev:
@@ -429,7 +429,7 @@ static void cuse_process_init_reply(struct fuse_mount *fm,
static int cuse_send_init(struct cuse_conn *cc)
{
	int rc;
	struct page *page;
	struct folio *folio;
	struct fuse_mount *fm = &cc->fm;
	struct cuse_init_args *ia;
	struct fuse_args_pages *ap;
@@ -437,13 +437,14 @@ static int cuse_send_init(struct cuse_conn *cc)
	BUILD_BUG_ON(CUSE_INIT_INFO_MAX > PAGE_SIZE);

	rc = -ENOMEM;
	page = alloc_page(GFP_KERNEL | __GFP_ZERO);
	if (!page)

	folio = folio_alloc(GFP_KERNEL | __GFP_ZERO, 0);
	if (!folio)
		goto err;

	ia = kzalloc(sizeof(*ia), GFP_KERNEL);
	if (!ia)
		goto err_free_page;
		goto err_free_folio;

	ap = &ia->ap;
	ia->in.major = FUSE_KERNEL_VERSION;
@@ -459,18 +460,19 @@ static int cuse_send_init(struct cuse_conn *cc)
	ap->args.out_args[1].size = CUSE_INIT_INFO_MAX;
	ap->args.out_argvar = true;
	ap->args.out_pages = true;
	ap->num_pages = 1;
	ap->pages = &ia->page;
	ap->descs = &ia->desc;
	ia->page = page;
	ap->uses_folios = true;
	ap->num_folios = 1;
	ap->folios = &ia->folio;
	ap->folio_descs = &ia->desc;
	ia->folio = folio;
	ia->desc.length = ap->args.out_args[1].size;
	ap->args.end = cuse_process_init_reply;

	rc = fuse_simple_background(fm, &ap->args, GFP_KERNEL);
	if (rc) {
		kfree(ia);
err_free_page:
		__free_page(page);
err_free_folio:
		folio_put(folio);
	}
err:
	return rc;