diff options
author | Theodore Ts'o <tytso@mit.edu> | 2015-04-16 01:56:00 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2015-04-16 01:56:00 -0400 |
commit | 6ddb2447846a8ece111e316a2863c2355023682d (patch) | |
tree | e56b2d3100baf35e7d99d79ff411c28bf8c5f4c2 /fs/ext4/super.c | |
parent | f348c252320b98e11176074fe04223f22bddaf0d (diff) |
ext4 crypto: enable encryption feature flag
Also add the test dummy encryption mode flag so we can more easily
test the encryption patches using xfstests.
Signed-off-by: Michael Halcrow <mhalcrow@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/super.c')
-rw-r--r-- | fs/ext4/super.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 1008ca258de4..f9ebd58f40dd 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c | |||
@@ -1106,7 +1106,7 @@ enum { | |||
1106 | Opt_commit, Opt_min_batch_time, Opt_max_batch_time, Opt_journal_dev, | 1106 | Opt_commit, Opt_min_batch_time, Opt_max_batch_time, Opt_journal_dev, |
1107 | Opt_journal_path, Opt_journal_checksum, Opt_journal_async_commit, | 1107 | Opt_journal_path, Opt_journal_checksum, Opt_journal_async_commit, |
1108 | Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback, | 1108 | Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback, |
1109 | Opt_data_err_abort, Opt_data_err_ignore, | 1109 | Opt_data_err_abort, Opt_data_err_ignore, Opt_test_dummy_encryption, |
1110 | Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota, | 1110 | Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota, |
1111 | Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota, | 1111 | Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota, |
1112 | Opt_noquota, Opt_barrier, Opt_nobarrier, Opt_err, | 1112 | Opt_noquota, Opt_barrier, Opt_nobarrier, Opt_err, |
@@ -1197,6 +1197,7 @@ static const match_table_t tokens = { | |||
1197 | {Opt_init_itable, "init_itable"}, | 1197 | {Opt_init_itable, "init_itable"}, |
1198 | {Opt_noinit_itable, "noinit_itable"}, | 1198 | {Opt_noinit_itable, "noinit_itable"}, |
1199 | {Opt_max_dir_size_kb, "max_dir_size_kb=%u"}, | 1199 | {Opt_max_dir_size_kb, "max_dir_size_kb=%u"}, |
1200 | {Opt_test_dummy_encryption, "test_dummy_encryption"}, | ||
1200 | {Opt_removed, "check=none"}, /* mount option from ext2/3 */ | 1201 | {Opt_removed, "check=none"}, /* mount option from ext2/3 */ |
1201 | {Opt_removed, "nocheck"}, /* mount option from ext2/3 */ | 1202 | {Opt_removed, "nocheck"}, /* mount option from ext2/3 */ |
1202 | {Opt_removed, "reservation"}, /* mount option from ext2/3 */ | 1203 | {Opt_removed, "reservation"}, /* mount option from ext2/3 */ |
@@ -1398,6 +1399,7 @@ static const struct mount_opts { | |||
1398 | {Opt_jqfmt_vfsv0, QFMT_VFS_V0, MOPT_QFMT}, | 1399 | {Opt_jqfmt_vfsv0, QFMT_VFS_V0, MOPT_QFMT}, |
1399 | {Opt_jqfmt_vfsv1, QFMT_VFS_V1, MOPT_QFMT}, | 1400 | {Opt_jqfmt_vfsv1, QFMT_VFS_V1, MOPT_QFMT}, |
1400 | {Opt_max_dir_size_kb, 0, MOPT_GTE0}, | 1401 | {Opt_max_dir_size_kb, 0, MOPT_GTE0}, |
1402 | {Opt_test_dummy_encryption, 0, MOPT_GTE0}, | ||
1401 | {Opt_err, 0, 0} | 1403 | {Opt_err, 0, 0} |
1402 | }; | 1404 | }; |
1403 | 1405 | ||
@@ -1574,6 +1576,15 @@ static int handle_mount_opt(struct super_block *sb, char *opt, int token, | |||
1574 | } | 1576 | } |
1575 | *journal_ioprio = | 1577 | *journal_ioprio = |
1576 | IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, arg); | 1578 | IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, arg); |
1579 | } else if (token == Opt_test_dummy_encryption) { | ||
1580 | #ifdef CONFIG_EXT4_FS_ENCRYPTION | ||
1581 | sbi->s_mount_flags |= EXT4_MF_TEST_DUMMY_ENCRYPTION; | ||
1582 | ext4_msg(sb, KERN_WARNING, | ||
1583 | "Test dummy encryption mode enabled"); | ||
1584 | #else | ||
1585 | ext4_msg(sb, KERN_WARNING, | ||
1586 | "Test dummy encryption mount option ignored"); | ||
1587 | #endif | ||
1577 | } else if (m->flags & MOPT_DATAJ) { | 1588 | } else if (m->flags & MOPT_DATAJ) { |
1578 | if (is_remount) { | 1589 | if (is_remount) { |
1579 | if (!sbi->s_journal) | 1590 | if (!sbi->s_journal) |
@@ -2671,11 +2682,13 @@ static struct attribute *ext4_attrs[] = { | |||
2671 | EXT4_INFO_ATTR(lazy_itable_init); | 2682 | EXT4_INFO_ATTR(lazy_itable_init); |
2672 | EXT4_INFO_ATTR(batched_discard); | 2683 | EXT4_INFO_ATTR(batched_discard); |
2673 | EXT4_INFO_ATTR(meta_bg_resize); | 2684 | EXT4_INFO_ATTR(meta_bg_resize); |
2685 | EXT4_INFO_ATTR(encryption); | ||
2674 | 2686 | ||
2675 | static struct attribute *ext4_feat_attrs[] = { | 2687 | static struct attribute *ext4_feat_attrs[] = { |
2676 | ATTR_LIST(lazy_itable_init), | 2688 | ATTR_LIST(lazy_itable_init), |
2677 | ATTR_LIST(batched_discard), | 2689 | ATTR_LIST(batched_discard), |
2678 | ATTR_LIST(meta_bg_resize), | 2690 | ATTR_LIST(meta_bg_resize), |
2691 | ATTR_LIST(encryption), | ||
2679 | NULL, | 2692 | NULL, |
2680 | }; | 2693 | }; |
2681 | 2694 | ||
@@ -3683,6 +3696,13 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) | |||
3683 | } | 3696 | } |
3684 | } | 3697 | } |
3685 | 3698 | ||
3699 | if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_ENCRYPT) && | ||
3700 | es->s_encryption_level) { | ||
3701 | ext4_msg(sb, KERN_ERR, "Unsupported encryption level %d", | ||
3702 | es->s_encryption_level); | ||
3703 | goto failed_mount; | ||
3704 | } | ||
3705 | |||
3686 | if (sb->s_blocksize != blocksize) { | 3706 | if (sb->s_blocksize != blocksize) { |
3687 | /* Validate the filesystem blocksize */ | 3707 | /* Validate the filesystem blocksize */ |
3688 | if (!sb_set_blocksize(sb, blocksize)) { | 3708 | if (!sb_set_blocksize(sb, blocksize)) { |
@@ -4045,6 +4065,13 @@ no_journal: | |||
4045 | } | 4065 | } |
4046 | } | 4066 | } |
4047 | 4067 | ||
4068 | if (unlikely(sbi->s_mount_flags & EXT4_MF_TEST_DUMMY_ENCRYPTION) && | ||
4069 | !(sb->s_flags & MS_RDONLY) && | ||
4070 | !EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_ENCRYPT)) { | ||
4071 | EXT4_SET_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_ENCRYPT); | ||
4072 | ext4_commit_super(sb, 1); | ||
4073 | } | ||
4074 | |||
4048 | /* | 4075 | /* |
4049 | * Get the # of file system overhead blocks from the | 4076 | * Get the # of file system overhead blocks from the |
4050 | * superblock if present. | 4077 | * superblock if present. |