[ Sasha's backport helper bot ] Hi, The upstream commit SHA1 provided is correct: 299910dcb4525ac0274f3efa9527876315ba4f67 Status in newer kernel trees: 6.13.y | Present (exact SHA1) 6.12.y | Present (exact SHA1) 6.6.y | Not found 6.1.y | Not found 5.15.y | Not found Note: The patch differs from the upstream commit: --- 1: 299910dcb4525 ! 1: 3d3719013c717 nilfs2: do not output warnings when clearing dirty buffers @@ Metadata ## Commit message ## nilfs2: do not output warnings when clearing dirty buffers + commit 299910dcb4525ac0274f3efa9527876315ba4f67 upstream. + After detecting file system corruption and degrading to a read-only mount, dirty folios and buffers in the page cache are cleared, and a large number of warnings are output at that time, often filling up the kernel log. @@ Commit message that suppresses the warning output, but since it is not currently used meaningfully, remove both the silent argument and the warning output. + [konishi.ryusuke@xxxxxxxxx: adjusted for page/folio conversion] Link: https://lkml.kernel.org/r/20240816090128.4561-1-konishi.ryusuke@xxxxxxxxx Signed-off-by: Ryusuke Konishi <konishi.ryusuke@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> + Stable-dep-of: ca76bb226bf4 ("nilfs2: do not force clear folio if buffer is referenced") ## fs/nilfs2/inode.c ## @@ fs/nilfs2/inode.c: static int nilfs_writepages(struct address_space *mapping, @@ fs/nilfs2/inode.c: static int nilfs_writepage(struct page *page, struct writebac * have dirty pages that try to be flushed in background. * So, here we simply discard this dirty page. */ -- nilfs_clear_folio_dirty(folio, false); -+ nilfs_clear_folio_dirty(folio); - folio_unlock(folio); +- nilfs_clear_dirty_page(page, false); ++ nilfs_clear_dirty_page(page); + unlock_page(page); return -EROFS; } ## fs/nilfs2/mdt.c ## @@ fs/nilfs2/mdt.c: nilfs_mdt_write_page(struct page *page, struct writeback_control *wbc) - * have dirty folios that try to be flushed in background. - * So, here we simply discard this dirty folio. + * have dirty pages that try to be flushed in background. + * So, here we simply discard this dirty page. */ -- nilfs_clear_folio_dirty(folio, false); -+ nilfs_clear_folio_dirty(folio); - folio_unlock(folio); +- nilfs_clear_dirty_page(page, false); ++ nilfs_clear_dirty_page(page); + unlock_page(page); return -EROFS; } @@ fs/nilfs2/mdt.c: void nilfs_mdt_restore_from_shadow_map(struct inode *inode) @@ fs/nilfs2/page.c: void nilfs_copy_back_pages(struct address_space *dmap, -void nilfs_clear_dirty_pages(struct address_space *mapping, bool silent) +void nilfs_clear_dirty_pages(struct address_space *mapping) { - struct folio_batch fbatch; + struct pagevec pvec; unsigned int i; @@ fs/nilfs2/page.c: void nilfs_clear_dirty_pages(struct address_space *mapping, bool silent) * was acquired. Skip processing in that case. */ - if (likely(folio->mapping == mapping)) -- nilfs_clear_folio_dirty(folio, silent); -+ nilfs_clear_folio_dirty(folio); + if (likely(page->mapping == mapping)) +- nilfs_clear_dirty_page(page, silent); ++ nilfs_clear_dirty_page(page); - folio_unlock(folio); + unlock_page(page); } @@ fs/nilfs2/page.c: void nilfs_clear_dirty_pages(struct address_space *mapping, bool silent) /** - * nilfs_clear_folio_dirty - discard dirty folio - * @folio: dirty folio that will be discarded + * nilfs_clear_dirty_page - discard dirty page + * @page: dirty page that will be discarded - * @silent: suppress [true] or print [false] warning messages */ --void nilfs_clear_folio_dirty(struct folio *folio, bool silent) -+void nilfs_clear_folio_dirty(struct folio *folio) +-void nilfs_clear_dirty_page(struct page *page, bool silent) ++void nilfs_clear_dirty_page(struct page *page) { -- struct inode *inode = folio->mapping->host; +- struct inode *inode = page->mapping->host; - struct super_block *sb = inode->i_sb; - struct buffer_head *bh, *head; - - BUG_ON(!folio_test_locked(folio)); +- + BUG_ON(!PageLocked(page)); - if (!silent) - nilfs_warn(sb, "discard dirty page: offset=%lld, ino=%lu", -- folio_pos(folio), inode->i_ino); +- page_offset(page), inode->i_ino); - - folio_clear_uptodate(folio); - folio_clear_mappedtodisk(folio); - -@@ fs/nilfs2/page.c: void nilfs_clear_folio_dirty(struct folio *folio, bool silent) - bh = head; + ClearPageUptodate(page); + ClearPageMappedToDisk(page); + ClearPageChecked(page); +@@ fs/nilfs2/page.c: void nilfs_clear_dirty_page(struct page *page, bool silent) + bh = head = page_buffers(page); do { lock_buffer(bh); - if (!silent) @@ fs/nilfs2/page.c: void nilfs_clear_folio_dirty(struct folio *folio, bool silent) } while (bh = bh->b_this_page, bh != head); ## fs/nilfs2/page.h ## -@@ fs/nilfs2/page.h: void nilfs_folio_bug(struct folio *); +@@ fs/nilfs2/page.h: void nilfs_page_bug(struct page *); int nilfs_copy_dirty_pages(struct address_space *, struct address_space *); void nilfs_copy_back_pages(struct address_space *, struct address_space *); --void nilfs_clear_folio_dirty(struct folio *, bool); +-void nilfs_clear_dirty_page(struct page *, bool); -void nilfs_clear_dirty_pages(struct address_space *, bool); -+void nilfs_clear_folio_dirty(struct folio *folio); ++void nilfs_clear_dirty_page(struct page *page); +void nilfs_clear_dirty_pages(struct address_space *mapping); + void nilfs_mapping_init(struct address_space *mapping, struct inode *inode); unsigned int nilfs_page_count_clean_buffers(struct page *, unsigned int, unsigned int); - unsigned long nilfs_find_uncommitted_extent(struct inode *inode, --- Results of testing on various branches: | Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-5.15.y | Success | Failed | | stable/linux-5.10.y | Success | Failed | | stable/linux-5.4.y | Success | Failed | Build Errors: Build error for stable/linux-5.15.y: ssh: connect to host 192.168.1.58 port 22: No route to host Build error for stable/linux-5.10.y: ssh: connect to host 192.168.1.58 port 22: No route to host Build error for stable/linux-5.4.y: ssh: connect to host 192.168.1.58 port 22: No route to host