mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
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:
parent
b3720382ee
commit
c190a13d71
5 changed files with 35 additions and 35 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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)) {
|
||||
|
|
|
@ -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>";
|
||||
|
|
Loading…
Add table
Reference in a new issue