]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mm: fix lockdep issues in writeback handling
authorMarek Szyprowski <m.szyprowski@samsung.com>
Tue, 26 Aug 2025 13:09:48 +0000 (15:09 +0200)
committerMiklos Szeredi <mszeredi@redhat.com>
Fri, 5 Sep 2025 07:11:28 +0000 (09:11 +0200)
Commit 2841808f35ee ("mm: remove BDI_CAP_WRITEBACK_ACCT") removed
BDI_CAP_WRITEBACK_ACCT flag and refactored code that depend on it.
Unfortunately it also moved some variable intialization out of guarded
scope in writeback handling, what triggers a true lockdep warning. Fix
this by moving initialization to the proper place.

Fixes: 2841808f35ee ("mm: remove BDI_CAP_WRITEBACK_ACCT")
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Joanne Koong <joannelkoong@gmail.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
mm/page-writeback.c

index de669636120d217d57586264b33ff7ab216cd57a..e359f141639db6b4f757eb50c6d577a8ea3a23ec 100644 (file)
@@ -3014,7 +3014,7 @@ bool __folio_end_writeback(struct folio *folio)
 
        if (mapping && mapping_use_writeback_tags(mapping)) {
                struct inode *inode = mapping->host;
-               struct bdi_writeback *wb = inode_to_wb(inode);
+               struct bdi_writeback *wb;
                unsigned long flags;
 
                xa_lock_irqsave(&mapping->i_pages, flags);
@@ -3022,6 +3022,7 @@ bool __folio_end_writeback(struct folio *folio)
                __xa_clear_mark(&mapping->i_pages, folio_index(folio),
                                        PAGECACHE_TAG_WRITEBACK);
 
+               wb = inode_to_wb(inode);
                wb_stat_mod(wb, WB_WRITEBACK, -nr);
                __wb_writeout_add(wb, nr);
                if (!mapping_tagged(mapping, PAGECACHE_TAG_WRITEBACK)) {
@@ -3054,7 +3055,7 @@ void __folio_start_writeback(struct folio *folio, bool keep_write)
        if (mapping && mapping_use_writeback_tags(mapping)) {
                XA_STATE(xas, &mapping->i_pages, folio_index(folio));
                struct inode *inode = mapping->host;
-               struct bdi_writeback *wb = inode_to_wb(inode);
+               struct bdi_writeback *wb;
                unsigned long flags;
                bool on_wblist;
 
@@ -3065,6 +3066,7 @@ void __folio_start_writeback(struct folio *folio, bool keep_write)
                on_wblist = mapping_tagged(mapping, PAGECACHE_TAG_WRITEBACK);
 
                xas_set_mark(&xas, PAGECACHE_TAG_WRITEBACK);
+               wb = inode_to_wb(inode);
                wb_stat_mod(wb, WB_WRITEBACK, nr);
                if (!on_wblist) {
                        wb_inode_writeback_start(wb);