ext3: don't update sb journal_devnum when RO dev
authorMaciej Żenczykowski <zenczykowski@gmail.com>
Sun, 26 Sep 2010 12:38:28 +0000 (12:38 +0000)
committerJan Kara <jack@suse.cz>
Thu, 6 Jan 2011 10:52:14 +0000 (11:52 +0100)
An ext3 filesystem on a read-only device, with an external journal
which is at a different device number then recorded in the superblock
will fail to honor the read-only setting of the device and trigger
a superblock update (write).

For example:
  - ext3 on a software raid which is in read-only mode
  - external journal on a read-write device which has changed device num
  - attempt to mount with -o journal_dev=<new_number>
  - hits BUG_ON(mddev->ro = 1) in md.c

Cc: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Maciej Żenczykowski <zenczykowski@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/ext3/super.c

index acf8695fa8f035935390dd6bc0c8e44e8d3e5961..04169318e6bafc8eaca8a830087d287bc1e99fcb 100644 (file)
@@ -2290,7 +2290,7 @@ static int ext3_load_journal(struct super_block *sb,
        EXT3_SB(sb)->s_journal = journal;
        ext3_clear_journal_err(sb, es);
 
-       if (journal_devnum &&
+       if (!really_read_only && journal_devnum &&
            journal_devnum != le32_to_cpu(es->s_journal_dev)) {
                es->s_journal_dev = cpu_to_le32(journal_devnum);