Also pass a folio to f2fs_find_in_inline_dir() and find_in_level().
Remove three calls to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <wi...@infradead.org>
---
 fs/f2fs/dir.c      | 32 +++++++++++++++++---------------
 fs/f2fs/f2fs.h     |  8 +++-----
 fs/f2fs/inline.c   |  8 ++++----
 fs/f2fs/namei.c    | 10 +++++-----
 fs/f2fs/recovery.c | 12 ++++++------
 5 files changed, 35 insertions(+), 35 deletions(-)

diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index aa3c18a39cd7..676a46153247 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -260,7 +260,7 @@ struct f2fs_dir_entry *f2fs_find_target_dentry(const struct 
f2fs_dentry_ptr *d,
 static struct f2fs_dir_entry *find_in_level(struct inode *dir,
                                        unsigned int level,
                                        const struct f2fs_filename *fname,
-                                       struct page **res_page,
+                                       struct folio **res_folio,
                                        bool use_hash)
 {
        int s = GET_DENTRY_SLOTS(fname->disk_name.len);
@@ -291,18 +291,18 @@ static struct f2fs_dir_entry *find_in_level(struct inode 
*dir,
                                bidx = next_pgofs;
                                continue;
                        } else {
-                               *res_page = &dentry_folio->page;
+                               *res_folio = dentry_folio;
                                break;
                        }
                }
 
                de = find_in_block(dir, dentry_folio, fname, &max_slots, 
use_hash);
                if (IS_ERR(de)) {
-                       *res_page = ERR_CAST(de);
+                       *res_folio = ERR_CAST(de);
                        de = NULL;
                        break;
                } else if (de) {
-                       *res_page = &dentry_folio->page;
+                       *res_folio = dentry_folio;
                        break;
                }
 
@@ -329,7 +329,7 @@ static struct f2fs_dir_entry *find_in_level(struct inode 
*dir,
 
 struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
                                         const struct f2fs_filename *fname,
-                                        struct page **res_page)
+                                        struct folio **res_folio)
 {
        unsigned long npages = dir_blocks(dir);
        struct f2fs_dir_entry *de = NULL;
@@ -337,13 +337,13 @@ struct f2fs_dir_entry *__f2fs_find_entry(struct inode 
*dir,
        unsigned int level;
        bool use_hash = true;
 
-       *res_page = NULL;
+       *res_folio = NULL;
 
 #if IS_ENABLED(CONFIG_UNICODE)
 start_find_entry:
 #endif
        if (f2fs_has_inline_dentry(dir)) {
-               de = f2fs_find_in_inline_dir(dir, fname, res_page, use_hash);
+               de = f2fs_find_in_inline_dir(dir, fname, res_folio, use_hash);
                goto out;
        }
 
@@ -359,8 +359,8 @@ struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
        }
 
        for (level = 0; level < max_depth; level++) {
-               de = find_in_level(dir, level, fname, res_page, use_hash);
-               if (de || IS_ERR(*res_page))
+               de = find_in_level(dir, level, fname, res_folio, use_hash);
+               if (de || IS_ERR(*res_folio))
                        break;
        }
 
@@ -388,6 +388,7 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
 {
        struct f2fs_dir_entry *de = NULL;
        struct f2fs_filename fname;
+       struct folio *rfolio;
        int err;
 
        err = f2fs_setup_filename(dir, child, 1, &fname);
@@ -399,7 +400,8 @@ struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
                return NULL;
        }
 
-       de = __f2fs_find_entry(dir, &fname, res_page);
+       de = __f2fs_find_entry(dir, &fname, &rfolio);
+       *res_page = &rfolio->page;
 
        f2fs_free_filename(&fname);
        return de;
@@ -781,7 +783,7 @@ int f2fs_do_add_link(struct inode *dir, const struct qstr 
*name,
                                struct inode *inode, nid_t ino, umode_t mode)
 {
        struct f2fs_filename fname;
-       struct page *page = NULL;
+       struct folio *folio = NULL;
        struct f2fs_dir_entry *de = NULL;
        int err;
 
@@ -797,14 +799,14 @@ int f2fs_do_add_link(struct inode *dir, const struct qstr 
*name,
         * consistency more.
         */
        if (current != F2FS_I(dir)->task) {
-               de = __f2fs_find_entry(dir, &fname, &page);
+               de = __f2fs_find_entry(dir, &fname, &folio);
                F2FS_I(dir)->task = NULL;
        }
        if (de) {
-               f2fs_put_page(page, 0);
+               f2fs_folio_put(folio, false);
                err = -EEXIST;
-       } else if (IS_ERR(page)) {
-               err = PTR_ERR(page);
+       } else if (IS_ERR(folio)) {
+               err = PTR_ERR(folio);
        } else {
                err = f2fs_add_dentry(dir, &fname, inode, ino, mode);
        }
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 5a6910b7d58a..43e4f44edcc9 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -3645,8 +3645,7 @@ void f2fs_update_parent_metadata(struct inode *dir, 
struct inode *inode,
 int f2fs_room_for_filename(const void *bitmap, int slots, int max_slots);
 void f2fs_drop_nlink(struct inode *dir, struct inode *inode);
 struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
-                                        const struct f2fs_filename *fname,
-                                        struct page **res_page);
+               const struct f2fs_filename *fname, struct folio **res_folio);
 struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
                        const struct qstr *child, struct page **res_page);
 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p);
@@ -4283,9 +4282,8 @@ int f2fs_try_convert_inline_dir(struct inode *dir, struct 
dentry *dentry);
 int f2fs_write_inline_data(struct inode *inode, struct folio *folio);
 int f2fs_recover_inline_data(struct inode *inode, struct page *npage);
 struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
-                                       const struct f2fs_filename *fname,
-                                       struct page **res_page,
-                                       bool use_hash);
+               const struct f2fs_filename *fname, struct folio **res_folio,
+               bool use_hash);
 int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent,
                        struct folio *ifolio);
 int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index bce99af7f4ef..c2e97e230cd1 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -352,7 +352,7 @@ int f2fs_recover_inline_data(struct inode *inode, struct 
page *npage)
 
 struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
                                        const struct f2fs_filename *fname,
-                                       struct page **res_page,
+                                       struct folio **res_folio,
                                        bool use_hash)
 {
        struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
@@ -363,7 +363,7 @@ struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode 
*dir,
 
        ifolio = f2fs_get_inode_folio(sbi, dir->i_ino);
        if (IS_ERR(ifolio)) {
-               *res_page = &ifolio->page;
+               *res_folio = ifolio;
                return NULL;
        }
 
@@ -373,11 +373,11 @@ struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct 
inode *dir,
        de = f2fs_find_target_dentry(&d, fname, NULL, use_hash);
        folio_unlock(ifolio);
        if (IS_ERR(de)) {
-               *res_page = ERR_CAST(de);
+               *res_folio = ERR_CAST(de);
                de = NULL;
        }
        if (de)
-               *res_page = &ifolio->page;
+               *res_folio = ifolio;
        else
                f2fs_folio_put(ifolio, false);
 
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 8f8b9b843bdf..4a3acb5edfda 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -463,7 +463,7 @@ static struct dentry *f2fs_lookup(struct inode *dir, struct 
dentry *dentry,
 {
        struct inode *inode = NULL;
        struct f2fs_dir_entry *de;
-       struct page *page;
+       struct folio *folio;
        struct dentry *new;
        nid_t ino = -1;
        int err = 0;
@@ -481,12 +481,12 @@ static struct dentry *f2fs_lookup(struct inode *dir, 
struct dentry *dentry,
                goto out_splice;
        if (err)
                goto out;
-       de = __f2fs_find_entry(dir, &fname, &page);
+       de = __f2fs_find_entry(dir, &fname, &folio);
        f2fs_free_filename(&fname);
 
        if (!de) {
-               if (IS_ERR(page)) {
-                       err = PTR_ERR(page);
+               if (IS_ERR(folio)) {
+                       err = PTR_ERR(folio);
                        goto out;
                }
                err = -ENOENT;
@@ -494,7 +494,7 @@ static struct dentry *f2fs_lookup(struct inode *dir, struct 
dentry *dentry,
        }
 
        ino = le32_to_cpu(de->ino);
-       f2fs_put_page(page, 0);
+       f2fs_folio_put(folio, false);
 
        inode = f2fs_iget(dir->i_sb, ino);
        if (IS_ERR(inode)) {
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 69d8eaaf9013..849d014023d4 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -165,7 +165,7 @@ static int recover_dentry(struct inode *inode, struct page 
*ipage,
        struct f2fs_dir_entry *de;
        struct f2fs_filename fname;
        struct qstr usr_fname;
-       struct page *page;
+       struct folio *folio;
        struct inode *dir, *einode;
        struct fsync_inode_entry *entry;
        int err = 0;
@@ -187,7 +187,7 @@ static int recover_dentry(struct inode *inode, struct page 
*ipage,
        if (err)
                goto out;
 retry:
-       de = __f2fs_find_entry(dir, &fname, &page);
+       de = __f2fs_find_entry(dir, &fname, &folio);
        if (de && inode->i_ino == le32_to_cpu(de->ino))
                goto out_put;
 
@@ -212,11 +212,11 @@ static int recover_dentry(struct inode *inode, struct 
page *ipage,
                        iput(einode);
                        goto out_put;
                }
-               f2fs_delete_entry(de, page, dir, einode);
+               f2fs_delete_entry(de, &folio->page, dir, einode);
                iput(einode);
                goto retry;
-       } else if (IS_ERR(page)) {
-               err = PTR_ERR(page);
+       } else if (IS_ERR(folio)) {
+               err = PTR_ERR(folio);
        } else {
                err = f2fs_add_dentry(dir, &fname, inode,
                                        inode->i_ino, inode->i_mode);
@@ -226,7 +226,7 @@ static int recover_dentry(struct inode *inode, struct page 
*ipage,
        goto out;
 
 out_put:
-       f2fs_put_page(page, 0);
+       f2fs_folio_put(folio, false);
 out:
        if (file_enc_name(inode))
                name = "<encrypted>";
-- 
2.47.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to