]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
fuse: convert fuse_writepages_fill() to use a folio for its tmp page
authorJoanne Koong <joannelkoong@gmail.com>
Mon, 26 Aug 2024 21:19:06 +0000 (14:19 -0700)
committerMiklos Szeredi <mszeredi@redhat.com>
Thu, 29 Aug 2024 09:43:12 +0000 (11:43 +0200)
To pave the way for refactoring out the shared logic in
fuse_writepages_fill() and fuse_writepage_locked(), this change converts
the temporary page in fuse_writepages_fill() to use the folio API.

This is similar to the change in commit e0887e095a80 ("fuse: Convert
fuse_writepage_locked to take a folio"), which converted the tmp page in
fuse_writepage_locked() to use the folio API.

inc_node_page_state() is intentionally preserved here instead of
converting to node_stat_add_folio() since it is updating the stat of the
underlying page and to better maintain API symmetry with
dec_node_page_stat() in fuse_writepage_finish_stat().

No functional changes added.

Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/file.c

index 9d4f8bdc38656c565158337b40a8dbbf838022e0..0653fac40782bdd27a844496935868f563987e84 100644 (file)
@@ -2260,7 +2260,7 @@ static int fuse_writepages_fill(struct folio *folio,
        struct inode *inode = data->inode;
        struct fuse_inode *fi = get_fuse_inode(inode);
        struct fuse_conn *fc = get_fuse_conn(inode);
-       struct page *tmp_page;
+       struct folio *tmp_folio;
        int err;
 
        if (wpa && fuse_writepage_need_send(fc, &folio->page, ap, data)) {
@@ -2269,8 +2269,8 @@ static int fuse_writepages_fill(struct folio *folio,
        }
 
        err = -ENOMEM;
-       tmp_page = alloc_page(GFP_NOFS | __GFP_HIGHMEM);
-       if (!tmp_page)
+       tmp_folio = folio_alloc(GFP_NOFS | __GFP_HIGHMEM, 0);
+       if (!tmp_folio)
                goto out_unlock;
 
        /*
@@ -2290,7 +2290,7 @@ static int fuse_writepages_fill(struct folio *folio,
                err = -ENOMEM;
                wpa = fuse_writepage_args_alloc();
                if (!wpa) {
-                       __free_page(tmp_page);
+                       folio_put(tmp_folio);
                        goto out_unlock;
                }
                fuse_writepage_add_to_bucket(fc, wpa);
@@ -2308,14 +2308,14 @@ static int fuse_writepages_fill(struct folio *folio,
        }
        folio_start_writeback(folio);
 
-       copy_highpage(tmp_page, &folio->page);
-       ap->pages[ap->num_pages] = tmp_page;
+       folio_copy(tmp_folio, folio);
+       ap->pages[ap->num_pages] = &tmp_folio->page;
        ap->descs[ap->num_pages].offset = 0;
        ap->descs[ap->num_pages].length = PAGE_SIZE;
        data->orig_pages[ap->num_pages] = &folio->page;
 
        inc_wb_stat(&inode_to_bdi(inode)->wb, WB_WRITEBACK);
-       inc_node_page_state(tmp_page, NR_WRITEBACK_TEMP);
+       inc_node_page_state(&tmp_folio->page, NR_WRITEBACK_TEMP);
 
        err = 0;
        if (data->wpa) {