aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMatthew Wilcox (Oracle) <willy@infradead.org>2025-02-18 05:51:46 +0000
committerJaegeuk Kim <jaegeuk@kernel.org>2025-03-04 17:02:25 +0000
commit48a34c5981039f34ea84dc5f4eab1d3911b78bca (patch)
tree30049287a8bbf410d183236caa8d8fab38dda015
parentmm: Remove grab_cache_page_write_begin() (diff)
downloadwireguard-linux-48a34c5981039f34ea84dc5f4eab1d3911b78bca.tar.xz
wireguard-linux-48a34c5981039f34ea84dc5f4eab1d3911b78bca.zip
f2fs: Use a folio in __get_node_page()
Retrieve a folio from the page cache and use it throughout. Saves six hidden calls to compound_head() and removes a reference to page->mapping. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to '')
-rw-r--r--fs/f2fs/node.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index e2157c289552..19581555e79b 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -1459,7 +1459,7 @@ void f2fs_ra_node_page(struct f2fs_sb_info *sbi, nid_t nid)
static struct page *__get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid,
struct page *parent, int start)
{
- struct page *page;
+ struct folio *folio;
int err;
if (!nid)
@@ -1467,11 +1467,11 @@ static struct page *__get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid,
if (f2fs_check_nid_range(sbi, nid))
return ERR_PTR(-EINVAL);
repeat:
- page = f2fs_grab_cache_page(NODE_MAPPING(sbi), nid, false);
- if (!page)
- return ERR_PTR(-ENOMEM);
+ folio = f2fs_grab_cache_folio(NODE_MAPPING(sbi), nid, false);
+ if (IS_ERR(folio))
+ return ERR_CAST(folio);
- err = read_node_page(page, 0);
+ err = read_node_page(&folio->page, 0);
if (err < 0) {
goto out_put_err;
} else if (err == LOCKED_PAGE) {
@@ -1482,40 +1482,40 @@ repeat:
if (parent)
f2fs_ra_node_pages(parent, start + 1, MAX_RA_NODE);
- lock_page(page);
+ folio_lock(folio);
- if (unlikely(page->mapping != NODE_MAPPING(sbi))) {
- f2fs_put_page(page, 1);
+ if (unlikely(folio->mapping != NODE_MAPPING(sbi))) {
+ f2fs_folio_put(folio, true);
goto repeat;
}
- if (unlikely(!PageUptodate(page))) {
+ if (unlikely(!folio_test_uptodate(folio))) {
err = -EIO;
goto out_err;
}
- if (!f2fs_inode_chksum_verify(sbi, page)) {
+ if (!f2fs_inode_chksum_verify(sbi, &folio->page)) {
err = -EFSBADCRC;
goto out_err;
}
page_hit:
- if (likely(nid == nid_of_node(page)))
- return page;
+ if (likely(nid == nid_of_node(&folio->page)))
+ return &folio->page;
f2fs_warn(sbi, "inconsistent node block, nid:%lu, node_footer[nid:%u,ino:%u,ofs:%u,cpver:%llu,blkaddr:%u]",
- nid, nid_of_node(page), ino_of_node(page),
- ofs_of_node(page), cpver_of_node(page),
- next_blkaddr_of_node(page));
+ nid, nid_of_node(&folio->page), ino_of_node(&folio->page),
+ ofs_of_node(&folio->page), cpver_of_node(&folio->page),
+ next_blkaddr_of_node(&folio->page));
set_sbi_flag(sbi, SBI_NEED_FSCK);
f2fs_handle_error(sbi, ERROR_INCONSISTENT_FOOTER);
err = -EFSCORRUPTED;
out_err:
- ClearPageUptodate(page);
+ folio_clear_uptodate(folio);
out_put_err:
/* ENOENT comes from read_node_page which is not an error. */
if (err != -ENOENT)
- f2fs_handle_page_eio(sbi, page_folio(page), NODE);
- f2fs_put_page(page, 1);
+ f2fs_handle_page_eio(sbi, folio, NODE);
+ f2fs_folio_put(folio, true);
return ERR_PTR(err);
}