diff options
author | Theodore Ts'o <tytso@mit.edu> | 2020-01-17 10:51:16 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2020-01-17 10:51:16 -0500 |
commit | dbc05604d33aece6c4ab55e9f621213243117212 (patch) | |
tree | 194707d74fd41657cec7a85c12deb0e448ad1c58 | |
parent | f8e4f457d30ccff19833ddaf6514632f054a4418 (diff) | |
download | e2fsprogs-dbc05604d33aece6c4ab55e9f621213243117212.tar.gz |
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 <tytso@mit.edu>
-rw-r--r-- | e2fsck/pass1.c | 14 | ||||
-rw-r--r-- | 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 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 |