|
@@ -1384,10 +1384,10 @@ static const struct mount_opts {
|
|
|
{Opt_nojournal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
|
|
|
MOPT_EXT4_ONLY | MOPT_CLEAR},
|
|
|
{Opt_journal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
|
|
|
- MOPT_EXT4_ONLY | MOPT_SET},
|
|
|
+ MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
|
|
|
{Opt_journal_async_commit, (EXT4_MOUNT_JOURNAL_ASYNC_COMMIT |
|
|
|
EXT4_MOUNT_JOURNAL_CHECKSUM),
|
|
|
- MOPT_EXT4_ONLY | MOPT_SET},
|
|
|
+ MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
|
|
|
{Opt_noload, EXT4_MOUNT_NOLOAD, MOPT_NO_EXT2 | MOPT_SET},
|
|
|
{Opt_err_panic, EXT4_MOUNT_ERRORS_PANIC, MOPT_SET | MOPT_CLEAR_ERR},
|
|
|
{Opt_err_ro, EXT4_MOUNT_ERRORS_RO, MOPT_SET | MOPT_CLEAR_ERR},
|
|
@@ -1519,6 +1519,8 @@ static int handle_mount_opt(struct super_block *sb, char *opt, int token,
|
|
|
if (m->flags & MOPT_EXPLICIT) {
|
|
|
if (m->mount_opt & EXT4_MOUNT_DELALLOC) {
|
|
|
set_opt2(sb, EXPLICIT_DELALLOC);
|
|
|
+ } else if (m->mount_opt & EXT4_MOUNT_JOURNAL_CHECKSUM) {
|
|
|
+ set_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM);
|
|
|
} else
|
|
|
return -1;
|
|
|
}
|
|
@@ -3677,6 +3679,31 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
|
|
|
"suppressed and not mounted read-only");
|
|
|
goto failed_mount_wq;
|
|
|
} else {
|
|
|
+ /* Nojournal mode, all journal mount options are illegal */
|
|
|
+ if (test_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM)) {
|
|
|
+ ext4_msg(sb, KERN_ERR, "can't mount with "
|
|
|
+ "journal_checksum, fs mounted w/o journal");
|
|
|
+ goto failed_mount_wq;
|
|
|
+ }
|
|
|
+ if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
|
|
|
+ ext4_msg(sb, KERN_ERR, "can't mount with "
|
|
|
+ "journal_async_commit, fs mounted w/o journal");
|
|
|
+ goto failed_mount_wq;
|
|
|
+ }
|
|
|
+ if (sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) {
|
|
|
+ ext4_msg(sb, KERN_ERR, "can't mount with "
|
|
|
+ "commit=%lu, fs mounted w/o journal",
|
|
|
+ sbi->s_commit_interval / HZ);
|
|
|
+ goto failed_mount_wq;
|
|
|
+ }
|
|
|
+ if (EXT4_MOUNT_DATA_FLAGS &
|
|
|
+ (sbi->s_mount_opt ^ sbi->s_def_mount_opt)) {
|
|
|
+ ext4_msg(sb, KERN_ERR, "can't mount with "
|
|
|
+ "data=, fs mounted w/o journal");
|
|
|
+ goto failed_mount_wq;
|
|
|
+ }
|
|
|
+ sbi->s_def_mount_opt &= EXT4_MOUNT_JOURNAL_CHECKSUM;
|
|
|
+ clear_opt(sb, JOURNAL_CHECKSUM);
|
|
|
clear_opt(sb, DATA_FLAGS);
|
|
|
sbi->s_journal = NULL;
|
|
|
needs_recovery = 0;
|