Skip to content

Commit 107d2be

Browse files
JasonYanHwtytso
authored andcommitted
ext4: factor out ext4_block_group_meta_init()
Factor out ext4_block_group_meta_init(). No functional change. Signed-off-by: Jason Yan <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Theodore Ts'o <[email protected]>
1 parent 269e922 commit 107d2be

File tree

1 file changed

+51
-39
lines changed

1 file changed

+51
-39
lines changed

fs/ext4/super.c

Lines changed: 51 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -5113,6 +5113,55 @@ static void ext4_hash_info_init(struct super_block *sb)
51135113
}
51145114
}
51155115

5116+
static int ext4_block_group_meta_init(struct super_block *sb, int silent)
5117+
{
5118+
struct ext4_sb_info *sbi = EXT4_SB(sb);
5119+
struct ext4_super_block *es = sbi->s_es;
5120+
int has_huge_files;
5121+
5122+
has_huge_files = ext4_has_feature_huge_file(sb);
5123+
sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits,
5124+
has_huge_files);
5125+
sb->s_maxbytes = ext4_max_size(sb->s_blocksize_bits, has_huge_files);
5126+
5127+
sbi->s_desc_size = le16_to_cpu(es->s_desc_size);
5128+
if (ext4_has_feature_64bit(sb)) {
5129+
if (sbi->s_desc_size < EXT4_MIN_DESC_SIZE_64BIT ||
5130+
sbi->s_desc_size > EXT4_MAX_DESC_SIZE ||
5131+
!is_power_of_2(sbi->s_desc_size)) {
5132+
ext4_msg(sb, KERN_ERR,
5133+
"unsupported descriptor size %lu",
5134+
sbi->s_desc_size);
5135+
return -EINVAL;
5136+
}
5137+
} else
5138+
sbi->s_desc_size = EXT4_MIN_DESC_SIZE;
5139+
5140+
sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group);
5141+
sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group);
5142+
5143+
sbi->s_inodes_per_block = sb->s_blocksize / EXT4_INODE_SIZE(sb);
5144+
if (sbi->s_inodes_per_block == 0 || sbi->s_blocks_per_group == 0) {
5145+
if (!silent)
5146+
ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem");
5147+
return -EINVAL;
5148+
}
5149+
if (sbi->s_inodes_per_group < sbi->s_inodes_per_block ||
5150+
sbi->s_inodes_per_group > sb->s_blocksize * 8) {
5151+
ext4_msg(sb, KERN_ERR, "invalid inodes per group: %lu\n",
5152+
sbi->s_inodes_per_group);
5153+
return -EINVAL;
5154+
}
5155+
sbi->s_itb_per_group = sbi->s_inodes_per_group /
5156+
sbi->s_inodes_per_block;
5157+
sbi->s_desc_per_block = sb->s_blocksize / EXT4_DESC_SIZE(sb);
5158+
sbi->s_mount_state = le16_to_cpu(es->s_state) & ~EXT4_FC_REPLAY;
5159+
sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb));
5160+
sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb));
5161+
5162+
return 0;
5163+
}
5164+
51165165
static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)
51175166
{
51185167
struct ext4_super_block *es = NULL;
@@ -5121,7 +5170,7 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)
51215170
struct inode *root;
51225171
int ret = -ENOMEM;
51235172
unsigned int i;
5124-
int needs_recovery, has_huge_files;
5173+
int needs_recovery;
51255174
int err = 0;
51265175
ext4_group_t first_not_zeroed;
51275176
struct ext4_fs_context *ctx = fc->fs_private;
@@ -5219,45 +5268,8 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)
52195268
goto failed_mount;
52205269
}
52215270

5222-
has_huge_files = ext4_has_feature_huge_file(sb);
5223-
sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits,
5224-
has_huge_files);
5225-
sb->s_maxbytes = ext4_max_size(sb->s_blocksize_bits, has_huge_files);
5226-
5227-
sbi->s_desc_size = le16_to_cpu(es->s_desc_size);
5228-
if (ext4_has_feature_64bit(sb)) {
5229-
if (sbi->s_desc_size < EXT4_MIN_DESC_SIZE_64BIT ||
5230-
sbi->s_desc_size > EXT4_MAX_DESC_SIZE ||
5231-
!is_power_of_2(sbi->s_desc_size)) {
5232-
ext4_msg(sb, KERN_ERR,
5233-
"unsupported descriptor size %lu",
5234-
sbi->s_desc_size);
5235-
goto failed_mount;
5236-
}
5237-
} else
5238-
sbi->s_desc_size = EXT4_MIN_DESC_SIZE;
5239-
5240-
sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group);
5241-
sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group);
5242-
5243-
sbi->s_inodes_per_block = sb->s_blocksize / EXT4_INODE_SIZE(sb);
5244-
if (sbi->s_inodes_per_block == 0 || sbi->s_blocks_per_group == 0) {
5245-
if (!silent)
5246-
ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem");
5271+
if (ext4_block_group_meta_init(sb, silent))
52475272
goto failed_mount;
5248-
}
5249-
if (sbi->s_inodes_per_group < sbi->s_inodes_per_block ||
5250-
sbi->s_inodes_per_group > sb->s_blocksize * 8) {
5251-
ext4_msg(sb, KERN_ERR, "invalid inodes per group: %lu\n",
5252-
sbi->s_inodes_per_group);
5253-
goto failed_mount;
5254-
}
5255-
sbi->s_itb_per_group = sbi->s_inodes_per_group /
5256-
sbi->s_inodes_per_block;
5257-
sbi->s_desc_per_block = sb->s_blocksize / EXT4_DESC_SIZE(sb);
5258-
sbi->s_mount_state = le16_to_cpu(es->s_state) & ~EXT4_FC_REPLAY;
5259-
sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb));
5260-
sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb));
52615273

52625274
ext4_hash_info_init(sb);
52635275

0 commit comments

Comments
 (0)