From dbc05604d33aece6c4ab55e9f621213243117212 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Fri, 17 Jan 2020 10:51:16 -0500 Subject: [PATCH] e2fsck: restart the full e2fsck run if the bad block inode is invalidate Previously, we just cleared the bad block list and restarted the inode scan, but we didn't do a full reset of all of e2fsck's state. When code handling this case; we didn't have the framework to do a restarted run. Now that we do, we can simply the code and make it more correct. Signed-off-by: Theodore Ts'o --- e2fsck/pass1.c | 14 +++----------- tests/f_bb_in_bb/expect.1 | 2 ++ 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index ed85431..4de9ca6 100644 --- a/e2fsck/pass1.c +++ b/e2fsck/pass1.c @@ -1382,17 +1382,9 @@ void e2fsck_pass1(e2fsck_t ctx) fix_problem(ctx, PR_1_ISCAN_ERROR, &pctx); ctx->flags |= E2F_FLAG_ABORT; - goto endit; - } - err = ext2fs_inode_scan_goto_blockgroup(scan, - 0); - if (err) { - fix_problem(ctx, PR_1_ISCAN_ERROR, - &pctx); - ctx->flags |= E2F_FLAG_ABORT; - goto endit; - } - continue; + } else + ctx->flags |= E2F_FLAG_RESTART; + goto endit; } if (!ctx->inode_bb_map) alloc_bb_map(ctx); diff --git a/tests/f_bb_in_bb/expect.1 b/tests/f_bb_in_bb/expect.1 index 1d719e5..1bd697e 100644 --- a/tests/f_bb_in_bb/expect.1 +++ b/tests/f_bb_in_bb/expect.1 @@ -1,6 +1,8 @@ Pass 1: Checking inodes, blocks, and sizes Bad block list says the bad block list inode is bad. Clear inode? yes +Restarting e2fsck from the beginning... +Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts -- 1.8.3.1