diff options
Diffstat (limited to 'fs/ext4/mballoc.c')
-rw-r--r-- | fs/ext4/mballoc.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c index b882868f4661..5dcb826401bb 100644 --- a/fs/ext4/mballoc.c +++ b/fs/ext4/mballoc.c | |||
@@ -2842,6 +2842,14 @@ ext4_mb_mark_diskspace_used(struct ext4_allocation_context *ac, | |||
2842 | spin_unlock(sb_bgl_lock(sbi, ac->ac_b_ex.fe_group)); | 2842 | spin_unlock(sb_bgl_lock(sbi, ac->ac_b_ex.fe_group)); |
2843 | percpu_counter_sub(&sbi->s_freeblocks_counter, ac->ac_b_ex.fe_len); | 2843 | percpu_counter_sub(&sbi->s_freeblocks_counter, ac->ac_b_ex.fe_len); |
2844 | 2844 | ||
2845 | if (sbi->s_log_groups_per_flex) { | ||
2846 | ext4_group_t flex_group = ext4_flex_group(sbi, | ||
2847 | ac->ac_b_ex.fe_group); | ||
2848 | spin_lock(sb_bgl_lock(sbi, flex_group)); | ||
2849 | sbi->s_flex_groups[flex_group].free_blocks -= ac->ac_b_ex.fe_len; | ||
2850 | spin_unlock(sb_bgl_lock(sbi, flex_group)); | ||
2851 | } | ||
2852 | |||
2845 | err = ext4_journal_dirty_metadata(handle, bitmap_bh); | 2853 | err = ext4_journal_dirty_metadata(handle, bitmap_bh); |
2846 | if (err) | 2854 | if (err) |
2847 | goto out_err; | 2855 | goto out_err; |
@@ -4342,6 +4350,13 @@ do_more: | |||
4342 | spin_unlock(sb_bgl_lock(sbi, block_group)); | 4350 | spin_unlock(sb_bgl_lock(sbi, block_group)); |
4343 | percpu_counter_add(&sbi->s_freeblocks_counter, count); | 4351 | percpu_counter_add(&sbi->s_freeblocks_counter, count); |
4344 | 4352 | ||
4353 | if (sbi->s_log_groups_per_flex) { | ||
4354 | ext4_group_t flex_group = ext4_flex_group(sbi, block_group); | ||
4355 | spin_lock(sb_bgl_lock(sbi, flex_group)); | ||
4356 | sbi->s_flex_groups[flex_group].free_blocks += count; | ||
4357 | spin_unlock(sb_bgl_lock(sbi, flex_group)); | ||
4358 | } | ||
4359 | |||
4345 | ext4_mb_release_desc(&e4b); | 4360 | ext4_mb_release_desc(&e4b); |
4346 | 4361 | ||
4347 | *freed += count; | 4362 | *freed += count; |