fuse: refactor finished writeback stats updates into helper function
authorJoanne Koong <joannelkoong@gmail.com>
Mon, 26 Aug 2024 21:19:03 +0000 (14:19 -0700)
committerMiklos Szeredi <mszeredi@redhat.com>
Thu, 29 Aug 2024 09:43:12 +0000 (11:43 +0200)
Move the logic for updating the bdi and page stats for a finished
writeback into a separate helper function, where it can be called from
both fuse_writepage_finish() and fuse_writepage_add() (in the case
where there is already an auxiliary write request for the page).

No functional changes added.

Suggested by: Jingbo Xu <jefflexu@linux.alibaba.com>

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 39d20c88283bf2bced2f6997b648533b2375be4d..e0bc5528d6b55f2af86f00da22e136f07bc16cb7 100644 (file)
@@ -1769,19 +1769,25 @@ static void fuse_writepage_free(struct fuse_writepage_args *wpa)
        kfree(wpa);
 }
 
+static void fuse_writepage_finish_stat(struct inode *inode, struct page *page)
+{
+       struct backing_dev_info *bdi = inode_to_bdi(inode);
+
+       dec_wb_stat(&bdi->wb, WB_WRITEBACK);
+       dec_node_page_state(page, NR_WRITEBACK_TEMP);
+       wb_writeout_inc(&bdi->wb);
+}
+
 static void fuse_writepage_finish(struct fuse_writepage_args *wpa)
 {
        struct fuse_args_pages *ap = &wpa->ia.ap;
        struct inode *inode = wpa->inode;
        struct fuse_inode *fi = get_fuse_inode(inode);
-       struct backing_dev_info *bdi = inode_to_bdi(inode);
        int i;
 
-       for (i = 0; i < ap->num_pages; i++) {
-               dec_wb_stat(&bdi->wb, WB_WRITEBACK);
-               dec_node_page_state(ap->pages[i], NR_WRITEBACK_TEMP);
-               wb_writeout_inc(&bdi->wb);
-       }
+       for (i = 0; i < ap->num_pages; i++)
+               fuse_writepage_finish_stat(inode, ap->pages[i]);
+
        wake_up(&fi->page_waitq);
 }
 
@@ -1833,14 +1839,9 @@ __acquires(fi->lock)
 
        /* After rb_erase() aux request list is private */
        for (aux = wpa->next; aux; aux = next) {
-               struct backing_dev_info *bdi = inode_to_bdi(aux->inode);
-
                next = aux->next;
                aux->next = NULL;
-
-               dec_wb_stat(&bdi->wb, WB_WRITEBACK);
-               dec_node_page_state(aux->ia.ap.pages[0], NR_WRITEBACK_TEMP);
-               wb_writeout_inc(&bdi->wb);
+               fuse_writepage_finish_stat(aux->inode, aux->ia.ap.pages[0]);
                fuse_writepage_free(aux);
        }
 
@@ -2209,11 +2210,7 @@ static bool fuse_writepage_add(struct fuse_writepage_args *new_wpa,
        spin_unlock(&fi->lock);
 
        if (tmp) {
-               struct backing_dev_info *bdi = inode_to_bdi(new_wpa->inode);
-
-               dec_wb_stat(&bdi->wb, WB_WRITEBACK);
-               dec_node_page_state(new_ap->pages[0], NR_WRITEBACK_TEMP);
-               wb_writeout_inc(&bdi->wb);
+               fuse_writepage_finish_stat(new_wpa->inode, new_ap->pages[0]);
                fuse_writepage_free(new_wpa);
        }