]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
tune2fs: allow enabling casefold feature after fs creation
authorGabriel Krisman Bertazi <krisman@collabora.com>
Thu, 17 Dec 2020 17:35:33 +0000 (18:35 +0100)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 28 Jan 2021 03:09:31 +0000 (22:09 -0500)
The main reason we didn't allow this before was because !CASEFOLDED
directories were expected to be normalized().  Since this is no longer
the case, and as long as the encrypt feature is not enabled, it should
be safe to enable this feature.

Disabling the feature is trickier, since we need to make sure there are
no existing +F directories in the filesystem.  Leave that for a future
patch.

Also, enabling strict mode requires some filesystem-wide verification,
so ignore that for now.

Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
Signed-off-by: Arnaud Ferraris <arnaud.ferraris@collabora.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
misc/tune2fs.c

index e660309f3b5722e64a6fe8633f8c1242e8f34c1a..590417704adb9c102069d9259d95904548813559 100644 (file)
@@ -161,7 +161,8 @@ static __u32 ok_features[3] = {
                EXT4_FEATURE_INCOMPAT_64BIT |
                EXT4_FEATURE_INCOMPAT_ENCRYPT |
                EXT4_FEATURE_INCOMPAT_CSUM_SEED |
-               EXT4_FEATURE_INCOMPAT_LARGEDIR,
+               EXT4_FEATURE_INCOMPAT_LARGEDIR |
+               EXT4_FEATURE_INCOMPAT_CASEFOLD,
        /* R/O compat */
        EXT2_FEATURE_RO_COMPAT_LARGE_FILE |
                EXT4_FEATURE_RO_COMPAT_HUGE_FILE|
@@ -1514,6 +1515,18 @@ mmp_error:
                }
        }
 
+       if (FEATURE_ON(E2P_FEATURE_INCOMPAT, EXT4_FEATURE_INCOMPAT_CASEFOLD)) {
+               if (ext2fs_has_feature_encrypt(sb)) {
+                       fputs(_("Cannot enable casefold feature on filesystems "
+                               "with the encrypt feature enabled.\n"),
+                             stderr);
+                       return 1;
+               }
+
+               sb->s_encoding = EXT4_ENC_UTF8_12_1;
+               sb->s_encoding_flags = e2p_get_encoding_flags(sb->s_encoding);
+       }
+
        if (sb->s_rev_level == EXT2_GOOD_OLD_REV &&
            (sb->s_feature_compat || sb->s_feature_ro_compat ||
             sb->s_feature_incompat))