f2fs: Pass a folio to __f2fs_find_entry()

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) <willy@infradead.org>
Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
Matthew Wilcox (Oracle) 2025-03-31 21:12:26 +01:00 committed by Jaegeuk Kim
parent b3720382ee
commit c190a13d71
5 changed files with 35 additions and 35 deletions

View file

@ -260,7 +260,7 @@ found:
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 @@ start_find_bucket:
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 @@ start_find_bucket:
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 @@ start_find_entry:
}
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;
}
@ -389,6 +389,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);
@ -400,7 +401,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;
@ -782,7 +784,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;
@ -798,14 +800,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);
}

View file

@ -3659,8 +3659,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);
@ -4297,9 +4296,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,

View file

@ -352,7 +352,7 @@ process_inline:
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);

View file

@ -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)) {

View file

@ -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 @@ retry:
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 @@ retry:
goto out;
out_put:
f2fs_put_page(page, 0);
f2fs_folio_put(folio, false);
out:
if (file_enc_name(inode))
name = "<encrypted>";