mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 11:37:06 +02:00
f2fs: Use a folio in truncate_nodes()
Remove two 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
df41014006
commit
878a05b09c
|
|
@ -987,7 +987,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
|
|||
int ofs, int depth)
|
||||
{
|
||||
struct dnode_of_data rdn = *dn;
|
||||
struct page *page;
|
||||
struct folio *folio;
|
||||
struct f2fs_node *rn;
|
||||
nid_t child_nid;
|
||||
unsigned int child_nofs;
|
||||
|
|
@ -999,15 +999,15 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
|
|||
|
||||
trace_f2fs_truncate_nodes_enter(dn->inode, dn->nid, dn->data_blkaddr);
|
||||
|
||||
page = f2fs_get_node_page(F2FS_I_SB(dn->inode), dn->nid);
|
||||
if (IS_ERR(page)) {
|
||||
trace_f2fs_truncate_nodes_exit(dn->inode, PTR_ERR(page));
|
||||
return PTR_ERR(page);
|
||||
folio = f2fs_get_node_folio(F2FS_I_SB(dn->inode), dn->nid);
|
||||
if (IS_ERR(folio)) {
|
||||
trace_f2fs_truncate_nodes_exit(dn->inode, PTR_ERR(folio));
|
||||
return PTR_ERR(folio);
|
||||
}
|
||||
|
||||
f2fs_ra_node_pages(page, ofs, NIDS_PER_BLOCK);
|
||||
f2fs_ra_node_pages(&folio->page, ofs, NIDS_PER_BLOCK);
|
||||
|
||||
rn = F2FS_NODE(page);
|
||||
rn = F2FS_NODE(&folio->page);
|
||||
if (depth < 3) {
|
||||
for (i = ofs; i < NIDS_PER_BLOCK; i++, freed++) {
|
||||
child_nid = le32_to_cpu(rn->in.nid[i]);
|
||||
|
|
@ -1017,7 +1017,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
|
|||
ret = truncate_dnode(&rdn);
|
||||
if (ret < 0)
|
||||
goto out_err;
|
||||
if (set_nid(page, i, 0, false))
|
||||
if (set_nid(&folio->page, i, 0, false))
|
||||
dn->node_changed = true;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -1031,7 +1031,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
|
|||
rdn.nid = child_nid;
|
||||
ret = truncate_nodes(&rdn, child_nofs, 0, depth - 1);
|
||||
if (ret == (NIDS_PER_BLOCK + 1)) {
|
||||
if (set_nid(page, i, 0, false))
|
||||
if (set_nid(&folio->page, i, 0, false))
|
||||
dn->node_changed = true;
|
||||
child_nofs += ret;
|
||||
} else if (ret < 0 && ret != -ENOENT) {
|
||||
|
|
@ -1043,19 +1043,19 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
|
|||
|
||||
if (!ofs) {
|
||||
/* remove current indirect node */
|
||||
dn->node_page = page;
|
||||
dn->node_page = &folio->page;
|
||||
ret = truncate_node(dn);
|
||||
if (ret)
|
||||
goto out_err;
|
||||
freed++;
|
||||
} else {
|
||||
f2fs_put_page(page, 1);
|
||||
f2fs_folio_put(folio, true);
|
||||
}
|
||||
trace_f2fs_truncate_nodes_exit(dn->inode, freed);
|
||||
return freed;
|
||||
|
||||
out_err:
|
||||
f2fs_put_page(page, 1);
|
||||
f2fs_folio_put(folio, true);
|
||||
trace_f2fs_truncate_nodes_exit(dn->inode, ret);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user