|
@@ -543,6 +543,19 @@ static inline void ext3_show_quota_options(struct seq_file *seq, struct super_bl
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
+static char *data_mode_string(unsigned long mode)
|
|
|
+{
|
|
|
+ switch (mode) {
|
|
|
+ case EXT3_MOUNT_JOURNAL_DATA:
|
|
|
+ return "journal";
|
|
|
+ case EXT3_MOUNT_ORDERED_DATA:
|
|
|
+ return "ordered";
|
|
|
+ case EXT3_MOUNT_WRITEBACK_DATA:
|
|
|
+ return "writeback";
|
|
|
+ }
|
|
|
+ return "unknown";
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Show an option if
|
|
|
* - it's set to a non-default value OR
|
|
@@ -616,13 +629,8 @@ static int ext3_show_options(struct seq_file *seq, struct vfsmount *vfs)
|
|
|
if (test_opt(sb, NOBH))
|
|
|
seq_puts(seq, ",nobh");
|
|
|
|
|
|
- if (test_opt(sb, DATA_FLAGS) == EXT3_MOUNT_JOURNAL_DATA)
|
|
|
- seq_puts(seq, ",data=journal");
|
|
|
- else if (test_opt(sb, DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA)
|
|
|
- seq_puts(seq, ",data=ordered");
|
|
|
- else if (test_opt(sb, DATA_FLAGS) == EXT3_MOUNT_WRITEBACK_DATA)
|
|
|
- seq_puts(seq, ",data=writeback");
|
|
|
-
|
|
|
+ seq_printf(seq, ",data=%s", data_mode_string(sbi->s_mount_opt &
|
|
|
+ EXT3_MOUNT_DATA_FLAGS));
|
|
|
if (test_opt(sb, DATA_ERR_ABORT))
|
|
|
seq_puts(seq, ",data_err=abort");
|
|
|
|
|
@@ -1024,12 +1032,18 @@ static int parse_options (char *options, struct super_block *sb,
|
|
|
datacheck:
|
|
|
if (is_remount) {
|
|
|
if ((sbi->s_mount_opt & EXT3_MOUNT_DATA_FLAGS)
|
|
|
- != data_opt) {
|
|
|
- printk(KERN_ERR
|
|
|
- "EXT3-fs: cannot change data "
|
|
|
- "mode on remount\n");
|
|
|
- return 0;
|
|
|
- }
|
|
|
+ == data_opt)
|
|
|
+ break;
|
|
|
+ printk(KERN_ERR
|
|
|
+ "EXT3-fs (device %s): Cannot change "
|
|
|
+ "data mode on remount. The filesystem "
|
|
|
+ "is mounted in data=%s mode and you "
|
|
|
+ "try to remount it in data=%s mode.\n",
|
|
|
+ sb->s_id,
|
|
|
+ data_mode_string(sbi->s_mount_opt &
|
|
|
+ EXT3_MOUNT_DATA_FLAGS),
|
|
|
+ data_mode_string(data_opt));
|
|
|
+ return 0;
|
|
|
} else {
|
|
|
sbi->s_mount_opt &= ~EXT3_MOUNT_DATA_FLAGS;
|
|
|
sbi->s_mount_opt |= data_opt;
|