@@ -3457,6 +3457,13 @@ static inline unsigned int ext4_flex_bg_size(struct ext4_sb_info *sbi)
return 1 << sbi->s_log_groups_per_flex;
}
+static inline struct flex_groups *ext4_get_flex_group(struct ext4_sb_info *sbi,
+ ext4_group_t block_group)
+{
+ return sbi_array_rcu_deref(sbi, s_flex_groups,
+ ext4_flex_group(sbi, block_group));
+}
+
static inline loff_t ext4_get_maxbytes(struct inode *inode)
{
if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))
@@ -336,8 +336,7 @@ void ext4_free_inode(handle_t *handle, struct inode *inode)
if (sbi->s_log_groups_per_flex) {
struct flex_groups *fg;
- fg = sbi_array_rcu_deref(sbi, s_flex_groups,
- ext4_flex_group(sbi, block_group));
+ fg = ext4_get_flex_group(sbi, block_group);
atomic_inc(&fg->free_inodes);
if (is_directory)
atomic_dec(&fg->used_dirs);
@@ -826,12 +825,8 @@ static void ext4_update_inode_group_desc(struct super_block *sb,
ext4_free_inodes_set(sb, gdp, ext4_free_inodes_count(sb, gdp) - 1);
if (S_ISDIR(mode)) {
ext4_used_dirs_set(sb, gdp, ext4_used_dirs_count(sb, gdp) + 1);
- if (sbi->s_log_groups_per_flex) {
- ext4_group_t f = ext4_flex_group(sbi, group);
-
- atomic_inc(&sbi_array_rcu_deref(sbi, s_flex_groups,
- f)->used_dirs);
- }
+ if (sbi->s_log_groups_per_flex)
+ atomic_inc(&ext4_get_flex_group(sbi, group)->used_dirs);
}
if (!ext4_has_group_desc_csum(sb))
@@ -997,7 +992,6 @@ struct inode *__ext4_new_inode(struct mnt_idmap *idmap,
int ret2, err;
struct inode *ret;
ext4_group_t i;
- ext4_group_t flex_group;
struct ext4_group_info *grp = NULL;
bool encrypt = false;
@@ -1220,11 +1214,8 @@ struct inode *__ext4_new_inode(struct mnt_idmap *idmap,
if (S_ISDIR(mode))
percpu_counter_inc(&sbi->s_dirs_counter);
- if (sbi->s_log_groups_per_flex) {
- flex_group = ext4_flex_group(sbi, group);
- atomic_dec(&sbi_array_rcu_deref(sbi, s_flex_groups,
- flex_group)->free_inodes);
- }
+ if (sbi->s_log_groups_per_flex)
+ atomic_dec(&ext4_get_flex_group(sbi, group)->free_inodes);
/* the inode bitmap is zero-based */
inode->i_ino = bit + 1 + group * EXT4_INODES_PER_GROUP(sb);
@@ -4181,9 +4181,7 @@ ext4_mb_mark_context(handle_t *handle, struct super_block *sb, bool state,
*ret_changed = changed;
if (sbi->s_log_groups_per_flex) {
- ext4_group_t flex_group = ext4_flex_group(sbi, group);
- struct flex_groups *fg = sbi_array_rcu_deref(sbi,
- s_flex_groups, flex_group);
+ struct flex_groups *fg = ext4_get_flex_group(sbi, group);
if (state)
atomic64_sub(changed, &fg->free_clusters);
@@ -1495,11 +1495,9 @@ static void ext4_update_super(struct super_block *sb,
ext4_debug("free blocks count %llu",
percpu_counter_read(&sbi->s_freeclusters_counter));
if (ext4_has_feature_flex_bg(sb) && sbi->s_log_groups_per_flex) {
- ext4_group_t flex_group;
struct flex_groups *fg;
- flex_group = ext4_flex_group(sbi, group_data[0].group);
- fg = sbi_array_rcu_deref(sbi, s_flex_groups, flex_group);
+ fg = ext4_get_flex_group(sbi, group_data[0].group);
atomic64_add(EXT4_NUM_B2C(sbi, free_blocks),
&fg->free_clusters);
atomic_add(EXT4_INODES_PER_GROUP(sb) * flex_gd->count,
@@ -3211,7 +3211,6 @@ static int ext4_fill_flex_info(struct super_block *sb)
struct ext4_sb_info *sbi = EXT4_SB(sb);
struct ext4_group_desc *gdp = NULL;
struct flex_groups *fg;
- ext4_group_t flex_group;
int i, err;
sbi->s_log_groups_per_flex = sbi->s_es->s_log_groups_per_flex;
@@ -3227,8 +3226,7 @@ static int ext4_fill_flex_info(struct super_block *sb)
for (i = 0; i < sbi->s_groups_count; i++) {
gdp = ext4_get_group_desc(sb, i, NULL);
- flex_group = ext4_flex_group(sbi, i);
- fg = sbi_array_rcu_deref(sbi, s_flex_groups, flex_group);
+ fg = ext4_get_flex_group(sbi, i);
atomic_add(ext4_free_inodes_count(sb, gdp), &fg->free_inodes);
atomic64_add(ext4_free_group_clusters(sb, gdp),
&fg->free_clusters);
Introduce ext4_get_flex_group() that combines ext4_flex_group() and sbi_array_rcu_deref() into a single call, replacing the repeated pattern across ialloc.c, mballoc.c, resize.c, and super.c. No functional change. Signed-off-by: Baokun Li <libaokun@linux.alibaba.com> --- fs/ext4/ext4.h | 7 +++++++ fs/ext4/ialloc.c | 19 +++++-------------- fs/ext4/mballoc.c | 4 +--- fs/ext4/resize.c | 4 +--- fs/ext4/super.c | 4 +--- 5 files changed, 15 insertions(+), 23 deletions(-)