ctx->spec |= EXT4_SPEC_DUMMY_ENCRYPTION;
                ctx->test_dummy_enc_arg = kmemdup_nul(param->string, param->size,
                                                      GFP_KERNEL);
+               return 0;
 #else
                ext4_msg(NULL, KERN_WARNING,
-                        "Test dummy encryption mount option ignored");
+                        "test_dummy_encryption option not supported");
+               return -EINVAL;
 #endif
-               return 0;
        case Opt_dax:
        case Opt_dax_type:
 #ifdef CONFIG_FS_DAX
 #endif
 }
 
+static int ext4_check_test_dummy_encryption(const struct fs_context *fc,
+                                           struct super_block *sb)
+{
+#ifdef CONFIG_FS_ENCRYPTION
+       const struct ext4_fs_context *ctx = fc->fs_private;
+       const struct ext4_sb_info *sbi = EXT4_SB(sb);
+
+       if (!(ctx->spec & EXT4_SPEC_DUMMY_ENCRYPTION))
+               return 0;
+
+       if (!ext4_has_feature_encrypt(sb)) {
+               ext4_msg(NULL, KERN_WARNING,
+                        "test_dummy_encryption requires encrypt feature");
+               return -EINVAL;
+       }
+       /*
+        * This mount option is just for testing, and it's not worthwhile to
+        * implement the extra complexity (e.g. RCU protection) that would be
+        * needed to allow it to be set or changed during remount.  We do allow
+        * it to be specified during remount, but only if there is no change.
+        */
+       if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE &&
+           !sbi->s_dummy_enc_policy.policy) {
+               ext4_msg(NULL, KERN_WARNING,
+                        "Can't set test_dummy_encryption on remount");
+               return -EINVAL;
+       }
+#endif /* CONFIG_FS_ENCRYPTION */
+       return 0;
+}
+
 static int ext4_check_opt_consistency(struct fs_context *fc,
                                      struct super_block *sb)
 {
        struct ext4_fs_context *ctx = fc->fs_private;
        struct ext4_sb_info *sbi = fc->s_fs_info;
        int is_remount = fc->purpose == FS_CONTEXT_FOR_RECONFIGURE;
+       int err;
 
        if ((ctx->opt_flags & MOPT_NO_EXT2) && IS_EXT2_SB(sb)) {
                ext4_msg(NULL, KERN_ERR,
                                 "for blocksize < PAGE_SIZE");
        }
 
-#ifdef CONFIG_FS_ENCRYPTION
-       /*
-        * This mount option is just for testing, and it's not worthwhile to
-        * implement the extra complexity (e.g. RCU protection) that would be
-        * needed to allow it to be set or changed during remount.  We do allow
-        * it to be specified during remount, but only if there is no change.
-        */
-       if ((ctx->spec & EXT4_SPEC_DUMMY_ENCRYPTION) &&
-           is_remount && !sbi->s_dummy_enc_policy.policy) {
-               ext4_msg(NULL, KERN_WARNING,
-                        "Can't set test_dummy_encryption on remount");
-               return -1;
-       }
-#endif
+       err = ext4_check_test_dummy_encryption(fc, sb);
+       if (err)
+               return err;
 
        if ((ctx->spec & EXT4_SPEC_DATAJ) && is_remount) {
                if (!sbi->s_journal) {
                goto failed_mount_wq;
        }
 
-       if (DUMMY_ENCRYPTION_ENABLED(sbi) && !sb_rdonly(sb) &&
-           !ext4_has_feature_encrypt(sb)) {
-               ext4_set_feature_encrypt(sb);
-               ext4_commit_super(sb);
-       }
-
        /*
         * Get the # of file system overhead blocks from the
         * superblock if present.