On 2017/10/31 9:38, Sheng Yong wrote:
> Fixing corrupted data depends on c.fix_on. If it's not set, we should not
> force fixing corrupted data. So if nat entries are found invalid when
> building nat_area_bitmap, we should just set c.bug_on, and fix it later.
It looks comments and code change doesn't match? do you mean
@@ -2031,7 +2032,6 @@ void build_nat_area_bitmap(struct f2fs_sb_info *sbi)
*/
ASSERT_MSG("Invalid nat entry[0]: "
"blk_addr[0x%x]\n", ni.blk_addr);
- c.fix_on = 1;
fsck->chk.valid_nat_entry_cnt--;
}
Thanks,
>
> Signed-off-by: Sheng Yong <[email protected]>
> ---
> fsck/mount.c | 21 ++++++++++++++-------
> 1 file changed, 14 insertions(+), 7 deletions(-)
>
> diff --git a/fsck/mount.c b/fsck/mount.c
> index faa9bc8..2d51678 100644
> --- a/fsck/mount.c
> +++ b/fsck/mount.c
> @@ -1877,9 +1877,15 @@ void nullify_nat_entry(struct f2fs_sb_info *sbi, u32
> nid)
> ret = dev_read_block(nat_block, block_addr);
> ASSERT(ret >= 0);
>
> - memset(&nat_block->entries[entry_off], 0,
> + if (nid == F2FS_NODE_INO(sbi) || nid == F2FS_META_INO(sbi)) {
> + FIX_MSG("nid [0x%x] block_addr= 0x%x -> 0x1", nid,
> + le32_to_cpu(nat_block->entries[entry_off].block_addr));
> + nat_block->entries[entry_off].block_addr = cpu_to_le32(0x1);
> + } else {
> + memset(&nat_block->entries[entry_off], 0,
> sizeof(struct f2fs_nat_entry));
> - FIX_MSG("Remove nid [0x%x] in NAT\n", nid);
> + FIX_MSG("Remove nid [0x%x] in NAT\n", nid);
> + }
>
> ret = dev_write_block(nat_block, block_addr);
> ASSERT(ret >= 0);
> @@ -2001,13 +2007,14 @@ void build_nat_area_bitmap(struct f2fs_sb_info *sbi)
>
> if ((nid + i) == F2FS_NODE_INO(sbi) ||
> (nid + i) == F2FS_META_INO(sbi)) {
> - /* block_addr of node/meta inode should be 0x1
> */
> + /*
> + * block_addr of node/meta inode should be 0x1.
> + * Set this bit, and fsck_verify will fix it.
> + */
> if
> (le32_to_cpu(nat_block->entries[i].block_addr) != 0x1) {
> - FIX_MSG("ino: 0x%x node/meta inode,
> block_addr= 0x%x -> 0x1",
> + ASSERT_MSG("\tError: ino[0x%x]
> block_addr[0x%x] is invalid\n",
> nid + i,
> le32_to_cpu(nat_block->entries[i].block_addr));
> - nat_block->entries[i].block_addr =
> cpu_to_le32(0x1);
> - ret = dev_write_block(nat_block,
> block_addr);
> - ASSERT(ret >= 0);
> + f2fs_set_bit(nid + i,
> fsck->nat_area_bitmap);
> }
> continue;
> }
>
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel