summaryrefslogtreecommitdiffstats
path: root/ext4-dont-manipulate-recovery-flag-when-freezing.patch
diff options
context:
space:
mode:
Diffstat (limited to 'ext4-dont-manipulate-recovery-flag-when-freezing.patch')
-rw-r--r--ext4-dont-manipulate-recovery-flag-when-freezing.patch66
1 files changed, 66 insertions, 0 deletions
diff --git a/ext4-dont-manipulate-recovery-flag-when-freezing.patch b/ext4-dont-manipulate-recovery-flag-when-freezing.patch
new file mode 100644
index 000000000..0dbf21b52
--- /dev/null
+++ b/ext4-dont-manipulate-recovery-flag-when-freezing.patch
@@ -0,0 +1,66 @@
+From: Eric Sandeen <sandeen@xxxxxxxxxx>
+Date: Wed, 05 Aug 2015 15:13:58 -0700
+Subject: [PATCH] ext4: don't manipulate recovery flag when freezing no-journal fs
+
+At some point along this sequence of changes:
+
+f6e63f9 ext4: fold ext4_nojournal_sops into ext4_sops
+bb04457 ext4: support freezing ext2 (nojournal) file systems
+9ca9238 ext4: Use separate super_operations structure for no_journal filesystems
+
+ext4 started setting needs_recovery on filesystems without journals
+when they are unfrozen. This makes no sense, and in fact confuses
+blkid to the point where it doesn't recognize the filesystem at all.
+
+(freeze ext2; unfreeze ext2; run blkid; see no output; run dumpe2fs,
+see needs_recovery set on fs w/ no journal).
+
+To fix this, don't manipulate the INCOMPAT_RECOVER feature on
+filesystems without journals.
+
+Reported-by: Stu Mark <smark@xxxxxxxxx>
+Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
+---
+
+Note, is there a reason that in ext4_freeze, if journal_flush
+fails, we skip the ext4_commit_super call? I didn't change that
+here, but it seems odd.
+
+diff --git a/fs/ext4/super.c b/fs/ext4/super.c
+index 58987b5..e7b345d 100644
+--- a/fs/ext4/super.c
++++ b/fs/ext4/super.c
+@@ -4833,10 +4833,11 @@ static int ext4_freeze(struct super_block *sb)
+ error = jbd2_journal_flush(journal);
+ if (error < 0)
+ goto out;
++
++ /* Journal blocked and flushed, clear needs_recovery flag. */
++ EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
+ }
+
+- /* Journal blocked and flushed, clear needs_recovery flag. */
+- EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
+ error = ext4_commit_super(sb, 1);
+ out:
+ if (journal)
+@@ -4854,8 +4855,11 @@ static int ext4_unfreeze(struct super_block *sb)
+ if (sb->s_flags & MS_RDONLY)
+ return 0;
+
+- /* Reset the needs_recovery flag before the fs is unlocked. */
+- EXT4_SET_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
++ if (EXT4_SB(sb)->s_journal) {
++ /* Reset the needs_recovery flag before the fs is unlocked. */
++ EXT4_SET_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
++ }
++
+ ext4_commit_super(sb, 1);
+ return 0;
+ }
+
+--
+To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
+the body of a message to majordomo@xxxxxxxxxxxxxxx
+More majordomo info at http://vger.kernel.org/majordomo-info.html
+