f2fs: Add f2fs_new_node_folio()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 31 Mar 2025 20:11:24 +0000 (21:11 +0100)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 28 Apr 2025 15:26:35 +0000 (15:26 +0000)
Convert f2fs_new_node_page() to f2fs_new_node_folio() and add
a compatibility wrapper.  Removes five hidden calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/f2fs.h
fs/f2fs/node.c

index 102887e..7226048 100644 (file)
@@ -3751,7 +3751,7 @@ int f2fs_wait_on_node_pages_writeback(struct f2fs_sb_info *sbi,
                                        unsigned int seq_id);
 int f2fs_remove_inode_page(struct inode *inode);
 struct page *f2fs_new_inode_page(struct inode *inode);
-struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs);
+struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs);
 void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid);
 struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid);
 struct folio *f2fs_get_inode_folio(struct f2fs_sb_info *sbi, pgoff_t ino);
@@ -3782,6 +3782,12 @@ void f2fs_destroy_node_manager(struct f2fs_sb_info *sbi);
 int __init f2fs_create_node_manager_caches(void);
 void f2fs_destroy_node_manager_caches(void);
 
+static inline
+struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs)
+{
+       return &f2fs_new_node_folio(dn, ofs)->page;
+}
+
 /*
  * segment.c
  */
index bea66cc..4ebbce1 100644 (file)
@@ -1320,19 +1320,19 @@ struct page *f2fs_new_inode_page(struct inode *inode)
        return f2fs_new_node_page(&dn, 0);
 }
 
-struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs)
+struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs)
 {
        struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
        struct node_info new_ni;
-       struct page *page;
+       struct folio *folio;
        int err;
 
        if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC)))
                return ERR_PTR(-EPERM);
 
-       page = f2fs_grab_cache_page(NODE_MAPPING(sbi), dn->nid, false);
-       if (!page)
-               return ERR_PTR(-ENOMEM);
+       folio = f2fs_grab_cache_folio(NODE_MAPPING(sbi), dn->nid, false);
+       if (IS_ERR(folio))
+               return folio;
 
        if (unlikely((err = inc_valid_node_count(sbi, dn->inode, !ofs))))
                goto fail;
@@ -1363,12 +1363,12 @@ struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs)
        new_ni.version = 0;
        set_node_addr(sbi, &new_ni, NEW_ADDR, false);
 
-       f2fs_wait_on_page_writeback(page, NODE, true, true);
-       fill_node_footer(page, dn->nid, dn->inode->i_ino, ofs, true);
-       set_cold_node(page, S_ISDIR(dn->inode->i_mode));
-       if (!PageUptodate(page))
-               SetPageUptodate(page);
-       if (set_page_dirty(page))
+       f2fs_folio_wait_writeback(folio, NODE, true, true);
+       fill_node_footer(&folio->page, dn->nid, dn->inode->i_ino, ofs, true);
+       set_cold_node(&folio->page, S_ISDIR(dn->inode->i_mode));
+       if (!folio_test_uptodate(folio))
+               folio_mark_uptodate(folio);
+       if (folio_mark_dirty(folio))
                dn->node_changed = true;
 
        if (f2fs_has_xattr_block(ofs))
@@ -1376,10 +1376,10 @@ struct page *f2fs_new_node_page(struct dnode_of_data *dn, unsigned int ofs)
 
        if (ofs == 0)
                inc_valid_inode_count(sbi);
-       return page;
+       return folio;
 fail:
-       clear_node_page_dirty(page);
-       f2fs_put_page(page, 1);
+       clear_node_page_dirty(&folio->page);
+       f2fs_folio_put(folio, true);
        return ERR_PTR(err);
 }