Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

jbd: don't write superblock when unmounting an ro filesystem

This sequence:

results in an IO error when unmounting the RO filesystem. The bug was
introduced by:

commit 9754e39c7bc51328f145e933bfb0df47cd67b6e9
Author: Jan Kara <jack@suse.cz>
Date: Sat Apr 7 12:33:03 2012 +0200

jbd: Split updating of journal superblock and marking journal empty

which lost some of the magic in journal_update_superblock() which
used to test for a journal with no outstanding transactions.

This is a port of a jbd2 fix by Eric Sandeen.

CC: <stable@vger.kernel.org> # 3.4.x
Signed-off-by: Jan Kara <jack@suse.cz>

Jan Kara 2e84f264 48d17884

+5
+5
fs/jbd/journal.c
··· 1113 1113 1114 1114 BUG_ON(!mutex_is_locked(&journal->j_checkpoint_mutex)); 1115 1115 spin_lock(&journal->j_state_lock); 1116 + /* Is it already empty? */ 1117 + if (sb->s_start == 0) { 1118 + spin_unlock(&journal->j_state_lock); 1119 + return; 1120 + } 1116 1121 jbd_debug(1, "JBD: Marking journal as empty (seq %d)\n", 1117 1122 journal->j_tail_sequence); 1118 1123