]> www.infradead.org Git - users/hch/misc.git/commitdiff
nilfs2: convert metadata aops from writepage to writepages
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Thu, 24 Oct 2024 09:25:46 +0000 (18:25 +0900)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 6 Nov 2024 01:12:40 +0000 (17:12 -0800)
By implementing ->writepages instead of ->writepage, we remove a layer of
indirect function calls from the writeback path and the last use of struct
page in nilfs2.

[konishi.ryusuke@gmail.com: fixed panic by using buffer_migrate_folio_norefs]
Link: https://lkml.kernel.org/r/20241002150036.1339475-5-willy@infradead.org
Link: https://lkml.kernel.org/r/20241024092602.13395-13-konishi.ryusuke@gmail.com
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/nilfs2/mdt.c

index a4c1e00aaaacdf440ec3d42fad009fa340ed7cb3..432181cfb0b535d5e2e3ce53807ba7442aee9106 100644 (file)
@@ -399,10 +399,9 @@ int nilfs_mdt_fetch_dirty(struct inode *inode)
        return test_bit(NILFS_I_DIRTY, &ii->i_state);
 }
 
-static int
-nilfs_mdt_write_page(struct page *page, struct writeback_control *wbc)
+static int nilfs_mdt_write_folio(struct folio *folio,
+               struct writeback_control *wbc)
 {
-       struct folio *folio = page_folio(page);
        struct inode *inode = folio->mapping->host;
        struct super_block *sb;
        int err = 0;
@@ -435,11 +434,23 @@ nilfs_mdt_write_page(struct page *page, struct writeback_control *wbc)
        return err;
 }
 
+static int nilfs_mdt_writeback(struct address_space *mapping,
+               struct writeback_control *wbc)
+{
+       struct folio *folio = NULL;
+       int error;
+
+       while ((folio = writeback_iter(mapping, wbc, folio, &error)))
+               error = nilfs_mdt_write_folio(folio, wbc);
+
+       return error;
+}
 
 static const struct address_space_operations def_mdt_aops = {
        .dirty_folio            = block_dirty_folio,
        .invalidate_folio       = block_invalidate_folio,
-       .writepage              = nilfs_mdt_write_page,
+       .writepages             = nilfs_mdt_writeback,
+       .migrate_folio          = buffer_migrate_folio_norefs,
 };
 
 static const struct inode_operations def_mdt_iops;