e2fsck: update the backup superblocks if the feature bitmasks are changed
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>
diff --git a/e2fsck/journal.c b/e2fsck/journal.c
index 756bbcb..dbe1bf1 100644
--- a/e2fsck/journal.c
+++ b/e2fsck/journal.c
@@ -454,6 +454,7 @@
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 @@
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);
}
}
diff --git a/e2fsck/pass2.c b/e2fsck/pass2.c
index 5e088e2..f58e5a9 100644
--- a/e2fsck/pass2.c
+++ b/e2fsck/pass2.c
@@ -267,6 +267,7 @@
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 @@
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);
}
}
diff --git a/e2fsck/super.c b/e2fsck/super.c
index e90e961..b4ddca2 100644
--- a/e2fsck/super.c
+++ b/e2fsck/super.c
@@ -682,7 +682,7 @@
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 @@
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);
diff --git a/e2fsck/unix.c b/e2fsck/unix.c
index 72545da..fbfd8e2 100644
--- a/e2fsck/unix.c
+++ b/e2fsck/unix.c
@@ -1252,6 +1252,7 @@
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;