mirror of
https://github.com/torvalds/linux.git
synced 2026-08-01 20:22:08 +02:00
f2fs: Use folios in truncate_partial_nodes()
Removes 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
878a05b09c
commit
d68833a0b7
|
|
@ -1063,7 +1063,7 @@ static int truncate_nodes(struct dnode_of_data *dn, unsigned int nofs,
|
|||
static int truncate_partial_nodes(struct dnode_of_data *dn,
|
||||
struct f2fs_inode *ri, int *offset, int depth)
|
||||
{
|
||||
struct page *pages[2];
|
||||
struct folio *folios[2];
|
||||
nid_t nid[3];
|
||||
nid_t child_nid;
|
||||
int err = 0;
|
||||
|
|
@ -1077,45 +1077,45 @@ static int truncate_partial_nodes(struct dnode_of_data *dn,
|
|||
/* get indirect nodes in the path */
|
||||
for (i = 0; i < idx + 1; i++) {
|
||||
/* reference count'll be increased */
|
||||
pages[i] = f2fs_get_node_page(F2FS_I_SB(dn->inode), nid[i]);
|
||||
if (IS_ERR(pages[i])) {
|
||||
err = PTR_ERR(pages[i]);
|
||||
folios[i] = f2fs_get_node_folio(F2FS_I_SB(dn->inode), nid[i]);
|
||||
if (IS_ERR(folios[i])) {
|
||||
err = PTR_ERR(folios[i]);
|
||||
idx = i - 1;
|
||||
goto fail;
|
||||
}
|
||||
nid[i + 1] = get_nid(pages[i], offset[i + 1], false);
|
||||
nid[i + 1] = get_nid(&folios[i]->page, offset[i + 1], false);
|
||||
}
|
||||
|
||||
f2fs_ra_node_pages(pages[idx], offset[idx + 1], NIDS_PER_BLOCK);
|
||||
f2fs_ra_node_pages(&folios[idx]->page, offset[idx + 1], NIDS_PER_BLOCK);
|
||||
|
||||
/* free direct nodes linked to a partial indirect node */
|
||||
for (i = offset[idx + 1]; i < NIDS_PER_BLOCK; i++) {
|
||||
child_nid = get_nid(pages[idx], i, false);
|
||||
child_nid = get_nid(&folios[idx]->page, i, false);
|
||||
if (!child_nid)
|
||||
continue;
|
||||
dn->nid = child_nid;
|
||||
err = truncate_dnode(dn);
|
||||
if (err < 0)
|
||||
goto fail;
|
||||
if (set_nid(pages[idx], i, 0, false))
|
||||
if (set_nid(&folios[idx]->page, i, 0, false))
|
||||
dn->node_changed = true;
|
||||
}
|
||||
|
||||
if (offset[idx + 1] == 0) {
|
||||
dn->node_page = pages[idx];
|
||||
dn->node_page = &folios[idx]->page;
|
||||
dn->nid = nid[idx];
|
||||
err = truncate_node(dn);
|
||||
if (err)
|
||||
goto fail;
|
||||
} else {
|
||||
f2fs_put_page(pages[idx], 1);
|
||||
f2fs_folio_put(folios[idx], true);
|
||||
}
|
||||
offset[idx]++;
|
||||
offset[idx + 1] = 0;
|
||||
idx--;
|
||||
fail:
|
||||
for (i = idx; i >= 0; i--)
|
||||
f2fs_put_page(pages[i], 1);
|
||||
f2fs_folio_put(folios[i], true);
|
||||
|
||||
trace_f2fs_truncate_partial_nodes(dn->inode, nid, depth, err);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user