]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
e2fsck: update the backup superblocks if the feature bitmasks are changed
authorTheodore Ts'o <tytso@mit.edu>
Sat, 6 Oct 2007 16:37:08 +0000 (12:37 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Sat, 6 Oct 2007 16:39:57 +0000 (12:39 -0400)
If e2fsck adds or deletes any of the feature bitmasks, clear
EXT2_FLAG_MASTER_SB_ONLY so the backup superblocks are updated when
e2fsck finishes.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
e2fsck/journal.c
e2fsck/pass2.c
e2fsck/super.c
e2fsck/unix.c

index 756bbcb2cb726a6aa6593d63b478126bf3fc48f5..dbe1bf11f2118c45ee2df3c87cdbd04775165293 100644 (file)
@@ -454,6 +454,7 @@ static errcode_t e2fsck_journal_fix_bad_inode(e2fsck_t ctx,
                        sb->s_feature_compat &= ~EXT3_FEATURE_COMPAT_HAS_JOURNAL;
                        sb->s_journal_inum = 0;
                        ctx->flags |= E2F_FLAG_JOURNAL_INODE;
+                       ctx->fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
                        e2fsck_clear_recover(ctx, 1);
                        return 0;
                }
@@ -753,6 +754,7 @@ no_has_journal:
                        e2fsck_clear_recover(ctx, force_fsck);
                } else if (!(ctx->options & E2F_OPT_READONLY)) {
                        sb->s_feature_compat |= EXT3_FEATURE_COMPAT_HAS_JOURNAL;
+                       ctx->fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
                        ext2fs_mark_super_dirty(ctx->fs);
                }
        }
index 5e088e2dd015a78f3c9ba18307db223b4783b679..f58e5a965c68b12e41732f62dcc0a052bb2edb9b 100644 (file)
@@ -267,6 +267,7 @@ void e2fsck_pass2(e2fsck_t ctx)
                    fix_problem(ctx, PR_2_FEATURE_LARGE_FILES, &pctx)) {
                        sb->s_feature_ro_compat |=
                                EXT2_FEATURE_RO_COMPAT_LARGE_FILE;
+                       fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
                        ext2fs_mark_super_dirty(fs);
                }
                if (sb->s_rev_level == EXT2_GOOD_OLD_REV &&
@@ -280,6 +281,7 @@ void e2fsck_pass2(e2fsck_t ctx)
                if (fs->flags & EXT2_FLAG_RW) {
                        sb->s_feature_ro_compat &= 
                                ~EXT2_FEATURE_RO_COMPAT_LARGE_FILE;
+                       fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
                        ext2fs_mark_super_dirty(fs);
                }
        }
index e90e961094c832294cf97b17fdce0a4435febc4c..b4ddca20670c33f25a422dbae3b9337068687f15 100644 (file)
@@ -682,7 +682,7 @@ void check_super_block(e2fsck_t ctx)
                        fs->super->s_feature_incompat &=
                                ~EXT2_FEATURE_INCOMPAT_FILETYPE;
                        ext2fs_mark_super_dirty(fs);
-
+                       fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
                }
        }
 
@@ -700,6 +700,7 @@ void check_super_block(e2fsck_t ctx)
            fix_problem(ctx, PR_0_FS_REV_LEVEL, &pctx)) {
                ext2fs_update_dynamic_rev(fs);
                ext2fs_mark_super_dirty(fs);
+               fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
        }
 
        check_resize_inode(ctx);
index 72545dab75d74cb8db8e5343df5ef6940e939551..fbfd8e20907d9a66562321468dc856a841e6c37b 100644 (file)
@@ -1252,6 +1252,7 @@ restart:
                        if (journal_size < 0) {
                                fs->super->s_feature_compat &=
                                        ~EXT3_FEATURE_COMPAT_HAS_JOURNAL;
+                               fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY;
                                com_err(ctx->program_name, 0, 
                                        _("Couldn't determine journal size"));
                                goto no_journal;