]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
fuse: support large folios for queued writes
authorJoanne Koong <joannelkoong@gmail.com>
Mon, 12 May 2025 22:58:37 +0000 (15:58 -0700)
committerMiklos Szeredi <mszeredi@redhat.com>
Thu, 29 May 2025 10:31:23 +0000 (12:31 +0200)
Add support for folios larger than one page size for queued writes.

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/file.c

index 8efdca3ce566a1bfe8824edbfc4497409158f5ea..f221a45b4bad4fd95a631ee21f03f63b90e8225c 100644 (file)
@@ -1789,11 +1789,14 @@ __releases(fi->lock)
 __acquires(fi->lock)
 {
        struct fuse_inode *fi = get_fuse_inode(wpa->inode);
+       struct fuse_args_pages *ap = &wpa->ia.ap;
        struct fuse_write_in *inarg = &wpa->ia.write.in;
-       struct fuse_args *args = &wpa->ia.ap.args;
-       /* Currently, all folios in FUSE are one page */
-       __u64 data_size = wpa->ia.ap.num_folios * PAGE_SIZE;
-       int err;
+       struct fuse_args *args = &ap->args;
+       __u64 data_size = 0;
+       int err, i;
+
+       for (i = 0; i < ap->num_folios; i++)
+               data_size += ap->descs[i].length;
 
        fi->writectr++;
        if (inarg->offset + data_size <= size) {