]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
fuse: use default writeback accounting
authorJoanne Koong <joannelkoong@gmail.com>
Mon, 7 Jul 2025 23:46:05 +0000 (16:46 -0700)
committerMiklos Szeredi <mszeredi@redhat.com>
Wed, 27 Aug 2025 12:29:43 +0000 (14:29 +0200)
commit 0c58a97f919c ("fuse: remove tmp folio for writebacks and internal
rb tree") removed temp folios for dirty page writeback. Consequently,
fuse can now use the default writeback accounting.

With switching fuse to use default writeback accounting, there are some
added benefits. This updates wb->writeback_inodes tracking as well now
and updates writeback throughput estimates after writeback completion.

This commit also removes inc_wb_stat() and dec_wb_stat(). These have no
callers anymore now that fuse does not call them.

Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Bernd Schubert <bschubert@ddn.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/file.c
fs/fuse/inode.c
include/linux/backing-dev.h

index ffda61c9bc0c7ff847b8dcb0953c3128ee3ac8b7..0698bcb2f992372f20aae646a502b05a73d5211f 100644 (file)
@@ -1822,19 +1822,15 @@ 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_folios; i++) {
+       for (i = 0; i < ap->num_folios; i++)
                /*
                 * Benchmarks showed that ending writeback within the
                 * scope of the fi->lock alleviates xarray lock
                 * contention and noticeably improves performance.
                 */
                iomap_finish_folio_write(inode, ap->folios[i], 1);
-               dec_wb_stat(&bdi->wb, WB_WRITEBACK);
-               wb_writeout_inc(&bdi->wb);
-       }
 
        wake_up(&fi->page_waitq);
 }
@@ -2009,14 +2005,11 @@ static void fuse_writepage_add_to_bucket(struct fuse_conn *fc,
 static void fuse_writepage_args_page_fill(struct fuse_writepage_args *wpa, struct folio *folio,
                                          uint32_t folio_index, loff_t offset, unsigned len)
 {
-       struct inode *inode = folio->mapping->host;
        struct fuse_args_pages *ap = &wpa->ia.ap;
 
        ap->folios[folio_index] = folio;
        ap->descs[folio_index].offset = offset;
        ap->descs[folio_index].length = len;
-
-       inc_wb_stat(&inode_to_bdi(inode)->wb, WB_WRITEBACK);
 }
 
 static struct fuse_writepage_args *fuse_writepage_args_setup(struct folio *folio,
index 7ddfd2b3cc9c4f14214671610c946891c9a9b1af..19fc58cb84dc1c8eb0211e7d4c138bc413401036 100644 (file)
@@ -1561,8 +1561,6 @@ static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb)
        if (err)
                return err;
 
-       /* fuse does it's own writeback accounting */
-       sb->s_bdi->capabilities &= ~BDI_CAP_WRITEBACK_ACCT;
        sb->s_bdi->capabilities |= BDI_CAP_STRICTLIMIT;
 
        /*
index e721148c95d07dcfdcc6e957bff935e67b004cf5..9a1e895dd5df1bc901a4ca63fb14be7ee4008165 100644 (file)
@@ -66,16 +66,6 @@ static inline void wb_stat_mod(struct bdi_writeback *wb,
        percpu_counter_add_batch(&wb->stat[item], amount, WB_STAT_BATCH);
 }
 
-static inline void inc_wb_stat(struct bdi_writeback *wb, enum wb_stat_item item)
-{
-       wb_stat_mod(wb, item, 1);
-}
-
-static inline void dec_wb_stat(struct bdi_writeback *wb, enum wb_stat_item item)
-{
-       wb_stat_mod(wb, item, -1);
-}
-
 static inline s64 wb_stat(struct bdi_writeback *wb, enum wb_stat_item item)
 {
        return percpu_counter_read_positive(&wb->stat[item]);