Re: [PATCH 5.4 5.10 5.15 1/3] nilfs2: do not output warnings when clearing dirty buffers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[ 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




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux