Message ID | 1697455651-11124-1-git-send-email-zhiguo.niu@unisoc.com (mailing list archive) |
---|---|
State | Accepted |
Commit | a5e80e18f268ea7c7a36bc4159de0deb3b5a2171 |
Headers | show |
Series | [f2fs-dev,V2] f2fs: fix error path of __f2fs_build_free_nids | expand |
Hello: This patch was applied to jaegeuk/f2fs.git (dev) by Jaegeuk Kim <jaegeuk@kernel.org>: On Mon, 16 Oct 2023 19:27:31 +0800 you wrote: > 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 > > [...] Here is the summary with links: - [f2fs-dev,V2] f2fs: fix error path of __f2fs_build_free_nids https://git.kernel.org/jaegeuk/f2fs/c/a5e80e18f268 You are awesome, thank you!
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index ee2e1dd..248764b 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -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); @@ -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; } } diff --git a/include/linux/f2fs_fs.h b/include/linux/f2fs_fs.h index a82a4bb..cf1adce 100644 --- a/include/linux/f2fs_fs.h +++ b/include/linux/f2fs_fs.h @@ -104,6 +104,7 @@ enum f2fs_error { ERROR_CORRUPTED_VERITY_XATTR, ERROR_CORRUPTED_XATTR, ERROR_INVALID_NODE_REFERENCE, + ERROR_INCONSISTENT_NAT, ERROR_MAX, };