|
@@ -1359,7 +1359,7 @@ static const struct mount_opts {
|
|
|
{Opt_delalloc, EXT4_MOUNT_DELALLOC,
|
|
|
MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
|
|
|
{Opt_nodelalloc, EXT4_MOUNT_DELALLOC,
|
|
|
- MOPT_EXT4_ONLY | MOPT_CLEAR | MOPT_EXPLICIT},
|
|
|
+ MOPT_EXT4_ONLY | MOPT_CLEAR},
|
|
|
{Opt_journal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
|
|
|
MOPT_EXT4_ONLY | MOPT_SET},
|
|
|
{Opt_journal_async_commit, (EXT4_MOUNT_JOURNAL_ASYNC_COMMIT |
|
|
@@ -3483,7 +3483,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
|
|
|
}
|
|
|
if (test_opt(sb, DIOREAD_NOLOCK)) {
|
|
|
ext4_msg(sb, KERN_ERR, "can't mount with "
|
|
|
- "both data=journal and delalloc");
|
|
|
+ "both data=journal and dioread_nolock");
|
|
|
goto failed_mount;
|
|
|
}
|
|
|
if (test_opt(sb, DELALLOC))
|
|
@@ -4727,6 +4727,21 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
|
|
|
goto restore_opts;
|
|
|
}
|
|
|
|
|
|
+ if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
|
|
|
+ if (test_opt2(sb, EXPLICIT_DELALLOC)) {
|
|
|
+ ext4_msg(sb, KERN_ERR, "can't mount with "
|
|
|
+ "both data=journal and delalloc");
|
|
|
+ err = -EINVAL;
|
|
|
+ goto restore_opts;
|
|
|
+ }
|
|
|
+ if (test_opt(sb, DIOREAD_NOLOCK)) {
|
|
|
+ ext4_msg(sb, KERN_ERR, "can't mount with "
|
|
|
+ "both data=journal and dioread_nolock");
|
|
|
+ err = -EINVAL;
|
|
|
+ goto restore_opts;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED)
|
|
|
ext4_abort(sb, "Abort forced by user");
|
|
|
|