]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
fuse: update stats for pages in dropped aux writeback list
authorJoanne Koong <joannelkoong@gmail.com>
Mon, 26 Aug 2024 21:19:04 +0000 (14:19 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 12 Sep 2024 09:06:43 +0000 (11:06 +0200)
commit f7790d67785302b3116bbbfda62a5a44524601a3 upstream.

In the case where the aux writeback list is dropped (e.g. the pages
have been truncated or the connection is broken), the stats for
its pages and backing device info need to be updated as well.

Fixes: e2653bd53a98 ("fuse: fix leaked aux requests")
Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Cc: <stable@vger.kernel.org> # v5.1
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/fuse/file.c

index 13d97547eaf6c502f4fac99572cbe6223e120e1d..fd7263ed25b92e5ea79cd42a185a3a53a1c1de24 100644 (file)
@@ -1692,10 +1692,16 @@ __acquires(fi->lock)
        fuse_writepage_finish(fm, wpa);
        spin_unlock(&fi->lock);
 
-       /* After fuse_writepage_finish() aux request list is private */
+       /* 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_free(aux);
        }