From: Theodore Ts'o Date: Fri, 17 Jan 2020 15:51:16 +0000 (-0500) Subject: e2fsck: restart the full e2fsck run if the bad block inode is invalidate X-Git-Tag: v1.46.0~77 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dbc05604d33aece6c4ab55e9f621213243117212;p=thirdparty%2Fe2fsprogs.git 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 --- diff --git a/e2fsck/pass1.c b/e2fsck/pass1.c index ed85431da..4de9ca653 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 1d719e51f..1bd697ec9 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