* [PATCH v2] fsck.f2fs: Fix up nat journal corruption with -a (auto-fix) option
@ 2019-05-24 6:09 Sahitya Tummala
2019-05-24 8:54 ` Chao Yu
0 siblings, 1 reply; 2+ messages in thread
From: Sahitya Tummala @ 2019-05-24 6:09 UTC (permalink / raw)
To: Jaegeuk Kim, Chao Yu, linux-f2fs-devel
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 <stummala@codeaurora.org>
---
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.
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-05-24 8:54 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-24 6:09 [PATCH v2] fsck.f2fs: Fix up nat journal corruption with -a (auto-fix) option Sahitya Tummala
2019-05-24 8:54 ` Chao Yu
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.