mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 21:51:40 +00:00
ext4: factor out ext4_encoding_init()
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>
This commit is contained in:
parent
0e495f7cc3
commit
39c135b08c
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user