]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
fuse: support large folios for symlinks
authorJoanne Koong <joannelkoong@gmail.com>
Mon, 12 May 2025 22:58:35 +0000 (15:58 -0700)
committerMiklos Szeredi <mszeredi@redhat.com>
Thu, 29 May 2025 10:31:23 +0000 (12:31 +0200)
Support large folios for symlinks and change the name from
fuse_getlink_page() to fuse_getlink_folio().

Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Reviewed-by: Bernd Schubert <bschubert@ddn.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/dir.c

index b670f1da31e6862d90dafbf41f261c0cfcbcc07e..a3d78aebbd0a0841cfc669d7d1bcd2913ff8cfc1 100644 (file)
@@ -1629,10 +1629,10 @@ static int fuse_permission(struct mnt_idmap *idmap,
        return err;
 }
 
-static int fuse_readlink_page(struct inode *inode, struct folio *folio)
+static int fuse_readlink_folio(struct inode *inode, struct folio *folio)
 {
        struct fuse_mount *fm = get_fuse_mount(inode);
-       struct fuse_folio_desc desc = { .length = PAGE_SIZE - 1 };
+       struct fuse_folio_desc desc = { .length = folio_size(folio) - 1 };
        struct fuse_args_pages ap = {
                .num_folios = 1,
                .folios = &folio,
@@ -1687,7 +1687,7 @@ static const char *fuse_get_link(struct dentry *dentry, struct inode *inode,
        if (!folio)
                goto out_err;
 
-       err = fuse_readlink_page(inode, folio);
+       err = fuse_readlink_folio(inode, folio);
        if (err) {
                folio_put(folio);
                goto out_err;
@@ -2288,7 +2288,7 @@ void fuse_init_dir(struct inode *inode)
 
 static int fuse_symlink_read_folio(struct file *null, struct folio *folio)
 {
-       int err = fuse_readlink_page(folio->mapping->host, folio);
+       int err = fuse_readlink_folio(folio->mapping->host, folio);
 
        if (!err)
                folio_mark_uptodate(folio);