ext4: factor out ext4_encoding_init()
authorJason Yan <yanaijie@huawei.com>
Fri, 16 Sep 2022 14:15:18 +0000 (22:15 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Sat, 1 Oct 2022 03:46:53 +0000 (23:46 -0400)
Factor out ext4_encoding_init(). No functional change.

Signed-off-by: Jason Yan <yanaijie@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20220916141527.1012715-8-yanaijie@huawei.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/super.c

index 2f7818b..3a480a2 100644 (file)
@@ -4492,6 +4492,54 @@ static int ext4_inode_info_init(struct super_block *sb,
        return 0;
 }
 
+#if IS_ENABLED(CONFIG_UNICODE)
+static int ext4_encoding_init(struct super_block *sb, struct ext4_super_block *es)
+{
+       const struct ext4_sb_encodings *encoding_info;
+       struct unicode_map *encoding;
+       __u16 encoding_flags = le16_to_cpu(es->s_encoding_flags);
+
+       if (!ext4_has_feature_casefold(sb) || sb->s_encoding)
+               return 0;
+
+       encoding_info = ext4_sb_read_encoding(es);
+       if (!encoding_info) {
+               ext4_msg(sb, KERN_ERR,
+                       "Encoding requested by superblock is unknown");
+               return -EINVAL;
+       }
+
+       encoding = utf8_load(encoding_info->version);
+       if (IS_ERR(encoding)) {
+               ext4_msg(sb, KERN_ERR,
+                       "can't mount with superblock charset: %s-%u.%u.%u "
+                       "not supported by the kernel. flags: 0x%x.",
+                       encoding_info->name,
+                       unicode_major(encoding_info->version),
+                       unicode_minor(encoding_info->version),
+                       unicode_rev(encoding_info->version),
+                       encoding_flags);
+               return -EINVAL;
+       }
+       ext4_msg(sb, KERN_INFO,"Using encoding defined by superblock: "
+               "%s-%u.%u.%u with flags 0x%hx", encoding_info->name,
+               unicode_major(encoding_info->version),
+               unicode_minor(encoding_info->version),
+               unicode_rev(encoding_info->version),
+               encoding_flags);
+
+       sb->s_encoding = encoding;
+       sb->s_encoding_flags = encoding_flags;
+
+       return 0;
+}
+#else
+static inline int ext4_encoding_init(struct super_block *sb, struct ext4_super_block *es)
+{
+       return 0;
+}
+#endif
+
 static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)
 {
        struct buffer_head *bh, **group_desc;
@@ -4649,42 +4697,8 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)
 
        ext4_apply_options(fc, sb);
 
-#if IS_ENABLED(CONFIG_UNICODE)
-       if (ext4_has_feature_casefold(sb) && !sb->s_encoding) {
-               const struct ext4_sb_encodings *encoding_info;
-               struct unicode_map *encoding;
-               __u16 encoding_flags = le16_to_cpu(es->s_encoding_flags);
-
-               encoding_info = ext4_sb_read_encoding(es);
-               if (!encoding_info) {
-                       ext4_msg(sb, KERN_ERR,
-                                "Encoding requested by superblock is unknown");
-                       goto failed_mount;
-               }
-
-               encoding = utf8_load(encoding_info->version);
-               if (IS_ERR(encoding)) {
-                       ext4_msg(sb, KERN_ERR,
-                                "can't mount with superblock charset: %s-%u.%u.%u "
-                                "not supported by the kernel. flags: 0x%x.",
-                                encoding_info->name,
-                                unicode_major(encoding_info->version),
-                                unicode_minor(encoding_info->version),
-                                unicode_rev(encoding_info->version),
-                                encoding_flags);
-                       goto failed_mount;
-               }
-               ext4_msg(sb, KERN_INFO,"Using encoding defined by superblock: "
-                        "%s-%u.%u.%u with flags 0x%hx", encoding_info->name,
-                        unicode_major(encoding_info->version),
-                        unicode_minor(encoding_info->version),
-                        unicode_rev(encoding_info->version),
-                        encoding_flags);
-
-               sb->s_encoding = encoding;
-               sb->s_encoding_flags = encoding_flags;
-       }
-#endif
+       if (ext4_encoding_init(sb, es))
+               goto failed_mount;
 
        if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
                printk_once(KERN_WARNING "EXT4-fs: Warning: mounting with data=journal disables delayed allocation, dioread_nolock, O_DIRECT and fast_commit support!\n");