f2fs: Use a folio in f2fs_init_inode_metadata()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 31 Mar 2025 20:11:47 +0000 (21:11 +0100)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 28 Apr 2025 15:26:38 +0000 (15:26 +0000)
Since this is the only caller of f2fs_new_inode_page(), convert that
to return a folio at the same time.  Removes four 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/dir.c
fs/f2fs/f2fs.h
fs/f2fs/node.c

index ee238ac9658a45274d83a33d593a2098452ee065..5fffa18871b0165aade0921a4bf0b1305e93d871 100644 (file)
@@ -518,46 +518,47 @@ static int make_empty_dir(struct inode *inode,
 struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
                        const struct f2fs_filename *fname, struct page *dpage)
 {
-       struct page *page;
+       struct folio *folio;
        int err;
 
        if (is_inode_flag_set(inode, FI_NEW_INODE)) {
-               page = f2fs_new_inode_page(inode);
-               if (IS_ERR(page))
-                       return page;
+               folio = f2fs_new_inode_folio(inode);
+               if (IS_ERR(folio))
+                       return &folio->page;
 
                if (S_ISDIR(inode->i_mode)) {
                        /* in order to handle error case */
-                       get_page(page);
-                       err = make_empty_dir(inode, dir, page);
+                       folio_get(folio);
+                       err = make_empty_dir(inode, dir, &folio->page);
                        if (err) {
-                               lock_page(page);
+                               folio_lock(folio);
                                goto put_error;
                        }
-                       put_page(page);
+                       folio_put(folio);
                }
 
-               err = f2fs_init_acl(inode, dir, page, dpage);
+               err = f2fs_init_acl(inode, dir, &folio->page, dpage);
                if (err)
                        goto put_error;
 
                err = f2fs_init_security(inode, dir,
-                                        fname ? fname->usr_fname : NULL, page);
+                                        fname ? fname->usr_fname : NULL,
+                                        &folio->page);
                if (err)
                        goto put_error;
 
                if (IS_ENCRYPTED(inode)) {
-                       err = fscrypt_set_context(inode, page);
+                       err = fscrypt_set_context(inode, folio);
                        if (err)
                                goto put_error;
                }
        } else {
-               page = f2fs_get_inode_page(F2FS_I_SB(dir), inode->i_ino);
-               if (IS_ERR(page))
-                       return page;
+               folio = f2fs_get_inode_folio(F2FS_I_SB(dir), inode->i_ino);
+               if (IS_ERR(folio))
+                       return &folio->page;
        }
 
-       init_dent_inode(dir, inode, fname, page);
+       init_dent_inode(dir, inode, fname, &folio->page);
 
        /*
         * This file should be checkpointed during fsync.
@@ -574,12 +575,12 @@ struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
                        f2fs_remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino);
                f2fs_i_links_write(inode, true);
        }
-       return page;
+       return &folio->page;
 
 put_error:
        clear_nlink(inode);
-       f2fs_update_inode(inode, page);
-       f2fs_put_page(page, 1);
+       f2fs_update_inode(inode, &folio->page);
+       f2fs_folio_put(folio, true);
        return ERR_PTR(err);
 }
 
index 4929c418024d36cf3dcf024693beae8151e36c16..2a26d511900658df661a2740aab9e8f5afbaf003 100644 (file)
@@ -3740,7 +3740,7 @@ int f2fs_truncate_xattr_node(struct inode *inode);
 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 folio *f2fs_new_inode_folio(struct inode *inode);
 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 folio *f2fs_get_node_folio(struct f2fs_sb_info *sbi, pgoff_t nid);
index 7118413578d029f6ecd43c13c71ac898e8c2cf7f..9e53025b9d142bfb6d73f1da4e110eb5190e7192 100644 (file)
@@ -1312,15 +1312,15 @@ int f2fs_remove_inode_page(struct inode *inode)
        return 0;
 }
 
-struct page *f2fs_new_inode_page(struct inode *inode)
+struct folio *f2fs_new_inode_folio(struct inode *inode)
 {
        struct dnode_of_data dn;
 
        /* allocate inode page for new inode */
        set_new_dnode(&dn, inode, NULL, NULL, inode->i_ino);
 
-       /* caller should f2fs_put_page(page, 1); */
-       return f2fs_new_node_page(&dn, 0);
+       /* caller should f2fs_folio_put(folio, true); */
+       return f2fs_new_node_folio(&dn, 0);
 }
 
 struct folio *f2fs_new_node_folio(struct dnode_of_data *dn, unsigned int ofs)
@@ -2367,7 +2367,7 @@ static bool add_free_nid(struct f2fs_sb_info *sbi,
                 *                          - __lookup_nat_cache
                 *  - f2fs_add_link
                 *   - f2fs_init_inode_metadata
-                *    - f2fs_new_inode_page
+                *    - f2fs_new_inode_folio
                 *     - f2fs_new_node_page
                 *      - set_node_addr
                 *  - f2fs_alloc_nid_done