aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarrick J. Wong <darrick.wong@oracle.com>2014-11-25 16:20:50 -0500
committerTheodore Ts'o <tytso@mit.edu>2014-11-25 16:20:50 -0500
commitc6d3d56dd0ef6c15fc007413c9d024021c178cf9 (patch)
tree928f042ae901be1de4813a8f898d054c47f00c98
parent58d86a50eee6f8d5a4768f739d10d94f9994180f (diff)
ext4: create nojournal_checksum mount option
Create a mount option to disable journal checksumming (because the metadata_csum feature turns it on by default now), and fix remount not to allow changing the journal checksumming option, since changing the mount options has no effect on the journal. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r--fs/ext4/super.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index b643009fddfe..3bd2982da36d 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -1136,7 +1136,7 @@ enum {
1136 Opt_inode_readahead_blks, Opt_journal_ioprio, 1136 Opt_inode_readahead_blks, Opt_journal_ioprio,
1137 Opt_dioread_nolock, Opt_dioread_lock, 1137 Opt_dioread_nolock, Opt_dioread_lock,
1138 Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable, 1138 Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
1139 Opt_max_dir_size_kb, 1139 Opt_max_dir_size_kb, Opt_nojournal_checksum,
1140}; 1140};
1141 1141
1142static const match_table_t tokens = { 1142static const match_table_t tokens = {
@@ -1170,6 +1170,7 @@ static const match_table_t tokens = {
1170 {Opt_journal_dev, "journal_dev=%u"}, 1170 {Opt_journal_dev, "journal_dev=%u"},
1171 {Opt_journal_path, "journal_path=%s"}, 1171 {Opt_journal_path, "journal_path=%s"},
1172 {Opt_journal_checksum, "journal_checksum"}, 1172 {Opt_journal_checksum, "journal_checksum"},
1173 {Opt_nojournal_checksum, "nojournal_checksum"},
1173 {Opt_journal_async_commit, "journal_async_commit"}, 1174 {Opt_journal_async_commit, "journal_async_commit"},
1174 {Opt_abort, "abort"}, 1175 {Opt_abort, "abort"},
1175 {Opt_data_journal, "data=journal"}, 1176 {Opt_data_journal, "data=journal"},
@@ -1351,6 +1352,8 @@ static const struct mount_opts {
1351 MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT}, 1352 MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
1352 {Opt_nodelalloc, EXT4_MOUNT_DELALLOC, 1353 {Opt_nodelalloc, EXT4_MOUNT_DELALLOC,
1353 MOPT_EXT4_ONLY | MOPT_CLEAR}, 1354 MOPT_EXT4_ONLY | MOPT_CLEAR},
1355 {Opt_nojournal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
1356 MOPT_EXT4_ONLY | MOPT_CLEAR},
1354 {Opt_journal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM, 1357 {Opt_journal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
1355 MOPT_EXT4_ONLY | MOPT_SET}, 1358 MOPT_EXT4_ONLY | MOPT_SET},
1356 {Opt_journal_async_commit, (EXT4_MOUNT_JOURNAL_ASYNC_COMMIT | 1359 {Opt_journal_async_commit, (EXT4_MOUNT_JOURNAL_ASYNC_COMMIT |
@@ -4844,6 +4847,14 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
4844 goto restore_opts; 4847 goto restore_opts;
4845 } 4848 }
4846 4849
4850 if ((old_opts.s_mount_opt & EXT4_MOUNT_JOURNAL_CHECKSUM) ^
4851 test_opt(sb, JOURNAL_CHECKSUM)) {
4852 ext4_msg(sb, KERN_ERR, "changing journal_checksum "
4853 "during remount not supported");
4854 err = -EINVAL;
4855 goto restore_opts;
4856 }
4857
4847 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) { 4858 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
4848 if (test_opt2(sb, EXPLICIT_DELALLOC)) { 4859 if (test_opt2(sb, EXPLICIT_DELALLOC)) {
4849 ext4_msg(sb, KERN_ERR, "can't mount with " 4860 ext4_msg(sb, KERN_ERR, "can't mount with "