Skip to content

Commit

Permalink
f2fs: fix error path of __f2fs_build_free_nids
Browse files Browse the repository at this point in the history
[ Upstream commit a5e80e1 ]

If NAT is corrupted, let scan_nat_page() return EFSCORRUPTED, so that,
caller can set SBI_NEED_FSCK flag into checkpoint for later repair by
fsck.

Also, this patch introduces a new fscorrupted error flag, and in above
scenario, it will persist the error flag into superblock synchronously
to avoid it has no luck to trigger a checkpoint to record SBI_NEED_FSCK

Signed-off-by: Zhiguo Niu <zhiguo.niu@unisoc.com>
Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
  • Loading branch information
Zhiguo Niu authored and gregkh committed Nov 28, 2023
1 parent 38f43d4 commit 184b4e4
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
11 changes: 9 additions & 2 deletions fs/f2fs/node.c
Original file line number Diff line number Diff line change
Expand Up @@ -2389,7 +2389,7 @@ static int scan_nat_page(struct f2fs_sb_info *sbi,
blk_addr = le32_to_cpu(nat_blk->entries[i].block_addr);

if (blk_addr == NEW_ADDR)
return -EINVAL;
return -EFSCORRUPTED;

if (blk_addr == NULL_ADDR) {
add_free_nid(sbi, start_nid, true, true);
Expand Down Expand Up @@ -2504,7 +2504,14 @@ static int __f2fs_build_free_nids(struct f2fs_sb_info *sbi,

if (ret) {
f2fs_up_read(&nm_i->nat_tree_lock);
f2fs_err(sbi, "NAT is corrupt, run fsck to fix it");

if (ret == -EFSCORRUPTED) {
f2fs_err(sbi, "NAT is corrupt, run fsck to fix it");
set_sbi_flag(sbi, SBI_NEED_FSCK);
f2fs_handle_error(sbi,
ERROR_INCONSISTENT_NAT);
}

return ret;
}
}
Expand Down
1 change: 1 addition & 0 deletions include/linux/f2fs_fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ enum f2fs_error {
ERROR_CORRUPTED_VERITY_XATTR,
ERROR_CORRUPTED_XATTR,
ERROR_INVALID_NODE_REFERENCE,
ERROR_INCONSISTENT_NAT,
ERROR_MAX,
};

Expand Down

0 comments on commit 184b4e4

Please sign in to comment.