e2fsck: fix file systems with an overly large s_first_meta_bg

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
Theodore Ts'o 2014-08-09 12:31:04 -04:00
parent f66e6ce444
commit 7a4352dccd
3 changed files with 20 additions and 0 deletions

View File

@ -440,6 +440,11 @@ static struct e2fsck_problem problem_table[] = {
N_("@S 64bit filesystems needs extents to access the whole disk. "),
PROMPT_FIX, PR_PREEN_OK | PR_NO_OK},
/* The first_meta_bg is too big */
{ PR_0_FIRST_META_BG_TOO_BIG,
N_("First_meta_bg is too big. (%N, max value %g). "),
PROMPT_CLEAR, 0 },
/* Pass 1 errors */
/* Pass 1: Checking inodes, blocks, and sizes */

View File

@ -252,6 +252,9 @@ struct problem_context {
/* 64bit is set but extents are not set. */
#define PR_0_64BIT_WITHOUT_EXTENTS 0x000048
/* The first_meta_bg is too big */
#define PR_0_FIRST_META_BG_TOO_BIG 0x000049
/*
* Pass 1 errors
*/

View File

@ -591,6 +591,18 @@ void check_super_block(e2fsck_t ctx)
ext2fs_mark_super_dirty(fs);
}
if ((fs->super->s_feature_incompat & EXT2_FEATURE_INCOMPAT_META_BG) &&
(fs->super->s_first_meta_bg > fs->desc_blocks)) {
pctx.group = fs->desc_blocks;
pctx.num = fs->super->s_first_meta_bg;
if (fix_problem(ctx, PR_0_FIRST_META_BG_TOO_BIG, &pctx)) {
fs->super->s_feature_incompat &=
~EXT2_FEATURE_INCOMPAT_META_BG;
fs->super->s_first_meta_bg = 0;
ext2fs_mark_super_dirty(fs);
}
}
/*
* Verify the group descriptors....
*/