Skip to content

Commit 1f79467

Browse files
JasonYanHwtytso
authored andcommitted
ext4: factor out ext4_percpu_param_init() and ext4_percpu_param_destroy()
Factor out ext4_percpu_param_init() and ext4_percpu_param_destroy(). And also use ext4_percpu_param_destroy() in ext4_put_super() to avoid duplicated code. No functional change. Signed-off-by: Jason Yan <yanaijie@huawei.com> Link: https://lore.kernel.org/r/20230323140517.1070239-3-yanaijie@huawei.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
1 parent db9345d commit 1f79467

1 file changed

Lines changed: 46 additions & 39 deletions

File tree

fs/ext4/super.c

Lines changed: 46 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,6 +1183,49 @@ static inline void ext4_quota_off_umount(struct super_block *sb)
11831183
}
11841184
#endif
11851185

1186+
static int ext4_percpu_param_init(struct ext4_sb_info *sbi)
1187+
{
1188+
ext4_fsblk_t block;
1189+
int err;
1190+
1191+
block = ext4_count_free_clusters(sbi->s_sb);
1192+
ext4_free_blocks_count_set(sbi->s_es, EXT4_C2B(sbi, block));
1193+
err = percpu_counter_init(&sbi->s_freeclusters_counter, block,
1194+
GFP_KERNEL);
1195+
if (!err) {
1196+
unsigned long freei = ext4_count_free_inodes(sbi->s_sb);
1197+
sbi->s_es->s_free_inodes_count = cpu_to_le32(freei);
1198+
err = percpu_counter_init(&sbi->s_freeinodes_counter, freei,
1199+
GFP_KERNEL);
1200+
}
1201+
if (!err)
1202+
err = percpu_counter_init(&sbi->s_dirs_counter,
1203+
ext4_count_dirs(sbi->s_sb), GFP_KERNEL);
1204+
if (!err)
1205+
err = percpu_counter_init(&sbi->s_dirtyclusters_counter, 0,
1206+
GFP_KERNEL);
1207+
if (!err)
1208+
err = percpu_counter_init(&sbi->s_sra_exceeded_retry_limit, 0,
1209+
GFP_KERNEL);
1210+
if (!err)
1211+
err = percpu_init_rwsem(&sbi->s_writepages_rwsem);
1212+
1213+
if (err)
1214+
ext4_msg(sbi->s_sb, KERN_ERR, "insufficient memory");
1215+
1216+
return err;
1217+
}
1218+
1219+
static void ext4_percpu_param_destroy(struct ext4_sb_info *sbi)
1220+
{
1221+
percpu_counter_destroy(&sbi->s_freeclusters_counter);
1222+
percpu_counter_destroy(&sbi->s_freeinodes_counter);
1223+
percpu_counter_destroy(&sbi->s_dirs_counter);
1224+
percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
1225+
percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit);
1226+
percpu_free_rwsem(&sbi->s_writepages_rwsem);
1227+
}
1228+
11861229
static void ext4_put_super(struct super_block *sb)
11871230
{
11881231
struct ext4_sb_info *sbi = EXT4_SB(sb);
@@ -1250,12 +1293,7 @@ static void ext4_put_super(struct super_block *sb)
12501293
kvfree(flex_groups);
12511294
}
12521295
rcu_read_unlock();
1253-
percpu_counter_destroy(&sbi->s_freeclusters_counter);
1254-
percpu_counter_destroy(&sbi->s_freeinodes_counter);
1255-
percpu_counter_destroy(&sbi->s_dirs_counter);
1256-
percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
1257-
percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit);
1258-
percpu_free_rwsem(&sbi->s_writepages_rwsem);
1296+
ext4_percpu_param_destroy(sbi);
12591297
#ifdef CONFIG_QUOTA
12601298
for (i = 0; i < EXT4_MAXQUOTAS; i++)
12611299
kfree(get_qf_name(sb, sbi, i));
@@ -5058,7 +5096,6 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)
50585096
struct ext4_super_block *es = NULL;
50595097
struct ext4_sb_info *sbi = EXT4_SB(sb);
50605098
struct flex_groups **flex_groups;
5061-
ext4_fsblk_t block;
50625099
ext4_fsblk_t logical_sb_block;
50635100
struct inode *root;
50645101
int ret = -ENOMEM;
@@ -5450,33 +5487,8 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)
54505487
sbi->s_journal->j_commit_callback =
54515488
ext4_journal_commit_callback;
54525489

5453-
block = ext4_count_free_clusters(sb);
5454-
ext4_free_blocks_count_set(sbi->s_es,
5455-
EXT4_C2B(sbi, block));
5456-
err = percpu_counter_init(&sbi->s_freeclusters_counter, block,
5457-
GFP_KERNEL);
5458-
if (!err) {
5459-
unsigned long freei = ext4_count_free_inodes(sb);
5460-
sbi->s_es->s_free_inodes_count = cpu_to_le32(freei);
5461-
err = percpu_counter_init(&sbi->s_freeinodes_counter, freei,
5462-
GFP_KERNEL);
5463-
}
5464-
if (!err)
5465-
err = percpu_counter_init(&sbi->s_dirs_counter,
5466-
ext4_count_dirs(sb), GFP_KERNEL);
5467-
if (!err)
5468-
err = percpu_counter_init(&sbi->s_dirtyclusters_counter, 0,
5469-
GFP_KERNEL);
5470-
if (!err)
5471-
err = percpu_counter_init(&sbi->s_sra_exceeded_retry_limit, 0,
5472-
GFP_KERNEL);
5473-
if (!err)
5474-
err = percpu_init_rwsem(&sbi->s_writepages_rwsem);
5475-
5476-
if (err) {
5477-
ext4_msg(sb, KERN_ERR, "insufficient memory");
5490+
if (ext4_percpu_param_init(sbi))
54785491
goto failed_mount6;
5479-
}
54805492

54815493
if (ext4_has_feature_flex_bg(sb))
54825494
if (!ext4_fill_flex_info(sb)) {
@@ -5566,12 +5578,7 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)
55665578
kvfree(flex_groups);
55675579
}
55685580
rcu_read_unlock();
5569-
percpu_counter_destroy(&sbi->s_freeclusters_counter);
5570-
percpu_counter_destroy(&sbi->s_freeinodes_counter);
5571-
percpu_counter_destroy(&sbi->s_dirs_counter);
5572-
percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
5573-
percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit);
5574-
percpu_free_rwsem(&sbi->s_writepages_rwsem);
5581+
ext4_percpu_param_destroy(sbi);
55755582
failed_mount5:
55765583
ext4_ext_release(sb);
55775584
ext4_release_system_zone(sb);

0 commit comments

Comments
 (0)