Whamcloud - gitweb
e2fsck: fix file systems with an overly large s_first_meta_bg
authorTheodore Ts'o <tytso@mit.edu>
Sat, 9 Aug 2014 16:31:04 +0000 (12:31 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 10 Aug 2014 20:21:08 +0000 (16:21 -0400)
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
e2fsck/problem.c
e2fsck/problem.h
e2fsck/super.c

index 6d9b1af..57c2e39 100644 (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 */
index d673a4e..3426a22 100644 (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
  */
index 8d468e6..768316a 100644 (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....
         */