With FLEX_BG we allocate block bitmap, inode bitmap, and inode table outside the group. So when initialzing the uninit block group we don't need to set bits corresponding to these meta-data in the bitmaps. Also return the right number of free blocks when counting the available free blocks in uninit group. Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx> --- fs/ext4/balloc.c | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletions(-) diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c index 5c80eb5..fb63f01 100644 --- a/fs/ext4/balloc.c +++ b/fs/ext4/balloc.c @@ -109,7 +109,14 @@ unsigned ext4_init_block_bitmap(struct super_block *sb, struct buffer_head *bh, for (bit = 0; bit < bit_max; bit++) ext4_set_bit(bit, bh->b_data); - + /* + * With FLEX_BG uninit group we have all the + * blocks available for use. So no need + * to set any bits in bitmap + */ + if (EXT4_HAS_INCOMPAT_FEATURE(sb, + EXT4_FEATURE_INCOMPAT_FLEX_BG)) + return free_blocks; start = ext4_group_first_block_no(sb, block_group); /* Set bits for block and inode bitmaps, and inode table */ @@ -126,6 +133,12 @@ unsigned ext4_init_block_bitmap(struct super_block *sb, struct buffer_head *bh, */ mark_bitmap_end(group_blocks, sb->s_blocksize * 8, bh->b_data); } + /* + * With FLEX_BG uninit group we have all the + * blocks available for use. + */ + if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FLEX_BG)) + return free_blocks; return free_blocks - sbi->s_itb_per_group - 2; } -- 1.5.5.1.211.g65ea3.dirty -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html