tags 454926 +pending
thanks
On Wed, Dec 12, 2007 at 12:35:58PM +0000, Alun wrote:
> In the past I've never had problems running tune2fs on live filesystems,
> but it seems that the new checks don't like it. It looks like
> tune2fs is only modifying the first superblock, which sounds wrong to
> me.
Actually tune2fs was modifying all of the superblocks, but the problem
was it was writing the NEEDS_RECOVERY (which is treated as an incompat
feature flag) to all of the superblocks, since the filesystem was
mounted at the time. Later on, the NEEDS_RECOVERY flag is getting
cleared when the filesystem cleanly unmounted, or when the journal is
replayed. But then the primary superblock's feature set looks
different from the backup's, and this triggers e2fsck to do a full
backup followed the superblock backup.
The fix is to never write out the NEEDS_RECOVERY flag to the backup
superblock.
- Ted
commit 9a083af71a2388ae47252f8af2b796f9055f4af7
Author: Theodore Ts'o <[EMAIL PROTECTED]>
Date: Sat Dec 15 19:39:37 2007 -0500
ext2fs_flushfs: Remove the NEEDS_RECOVERY from the backup superblocks
Now that e2fsck tries to backup the primary superblock to the backups
when the feature sets ar different, it's important when tune2fs writes
out a changed superblock, that we filter out the
EXT3_FEATURE_INCOMPAT_RECOVER feature to the backup superblocks, since
it will be removed from the primary superblock either when the
filesystem is mounted uncleanly or when journal is replayed.
Addresses-Debian-Bug: #454926
Signed-off-by: "Theodore Ts'o" <[EMAIL PROTECTED]>
diff --git a/lib/ext2fs/closefs.c b/lib/ext2fs/closefs.c
index f3fe533..88c515a 100644
--- a/lib/ext2fs/closefs.c
+++ b/lib/ext2fs/closefs.c
@@ -208,6 +208,7 @@ errcode_t ext2fs_flush(ext2_filsys fs)
dgrp_t i,j;
errcode_t retval;
unsigned long fs_state;
+ __u32 feature_incompat;
struct ext2_super_block *super_shadow = 0;
struct ext2_group_desc *group_shadow = 0;
struct ext2_group_desc *s, *t;
@@ -217,6 +218,7 @@ errcode_t ext2fs_flush(ext2_filsys fs)
EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
fs_state = fs->super->s_state;
+ feature_incompat = fs->super->s_feature_incompat;
fs->super->s_wtime = fs->now ? fs->now : time(NULL);
fs->super->s_block_group_nr = 0;
@@ -254,6 +256,7 @@ errcode_t ext2fs_flush(ext2_filsys fs)
* we write out the backup superblocks.)
*/
fs->super->s_state &= ~EXT2_VALID_FS;
+ fs->super->s_feature_incompat &= ~EXT3_FEATURE_INCOMPAT_RECOVER;
#ifdef EXT2FS_ENABLE_SWAPFS
if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
*super_shadow = *fs->super;
@@ -332,6 +335,7 @@ write_primary_superblock_only:
fs->super->s_block_group_nr = 0;
fs->super->s_state = fs_state;
+ fs->super->s_feature_incompat = feature_incompat;
#ifdef EXT2FS_ENABLE_SWAPFS
if (fs->flags & EXT2_FLAG_SWAP_BYTES) {
*super_shadow = *fs->super;
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]