Build segment manager and node manager always to catch and auto-fix invalid NAT entries found in the NAT journal.
Signed-off-by: Sahitya Tummala <[email protected]> --- v2: - cover all error paths in f2fs_init_nid_bitmap() fsck/mount.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/fsck/mount.c b/fsck/mount.c index aa64e93..784003c 100644 --- a/fsck/mount.c +++ b/fsck/mount.c @@ -1071,6 +1071,7 @@ static int f2fs_init_nid_bitmap(struct f2fs_sb_info *sbi) "NAT_JOURNAL_ENTRIES(%lu)\n", nats_in_cursum(journal), NAT_JOURNAL_ENTRIES); journal->n_nats = cpu_to_le16(NAT_JOURNAL_ENTRIES); + c.fix_on = 1; } for (i = 0; i < nats_in_cursum(journal); i++) { @@ -1080,6 +1081,7 @@ static int f2fs_init_nid_bitmap(struct f2fs_sb_info *sbi) if (!IS_VALID_BLK_ADDR(sbi, addr)) { MSG(0, "\tError: f2fs_init_nid_bitmap: addr(%u) is invalid!!!\n", addr); journal->n_nats = cpu_to_le16(i); + c.fix_on = 1; continue; } @@ -1087,6 +1089,7 @@ static int f2fs_init_nid_bitmap(struct f2fs_sb_info *sbi) if (!IS_VALID_NID(sbi, nid)) { MSG(0, "\tError: f2fs_init_nid_bitmap: nid(%u) is invalid!!!\n", nid); journal->n_nats = cpu_to_le16(i); + c.fix_on = 1; continue; } if (addr != NULL_ADDR) @@ -2632,19 +2635,6 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi) c.fix_on = 1; } - if (c.auto_fix || c.preen_mode) { - u32 flag = get_cp(ckpt_flags); - - if (flag & CP_FSCK_FLAG || - flag & CP_QUOTA_NEED_FSCK_FLAG || - (exist_qf_ino(sb) && (flag & CP_ERROR_FLAG))) { - c.fix_on = 1; - } else if (!c.preen_mode) { - print_cp_state(flag); - return 1; - } - } - c.bug_on = 0; tune_sb_features(sbi); @@ -2670,6 +2660,19 @@ int f2fs_do_mount(struct f2fs_sb_info *sbi) return -1; } + if (!c.fix_on && (c.auto_fix || c.preen_mode)) { + u32 flag = get_cp(ckpt_flags); + + if (flag & CP_FSCK_FLAG || + flag & CP_QUOTA_NEED_FSCK_FLAG || + (exist_qf_ino(sb) && (flag & CP_ERROR_FLAG))) { + c.fix_on = 1; + } else if (!c.preen_mode) { + print_cp_state(flag); + return 1; + } + } + /* Check nat_bits */ if (c.func == FSCK && is_set_ckpt_flags(cp, CP_NAT_BITS_FLAG)) { if (check_nat_bits(sbi, sb, cp) && c.fix_on) -- Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc. Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project. _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
