]> Pileus Git - ~andy/linux/blobdiff - fs/ext4/super.c
Update flex_bg free blocks and free inodes counters when resizing.
[~andy/linux] / fs / ext4 / super.c
index efa40d9d37920855fecae8d79780762a1b8cf033..f58cc0309dc90b90283728e6e018e86dd2acbc12 100644 (file)
@@ -1507,8 +1507,11 @@ static int ext4_fill_flex_info(struct super_block *sb)
        sbi->s_log_groups_per_flex = sbi->s_es->s_log_groups_per_flex;
        groups_per_flex = 1 << sbi->s_log_groups_per_flex;
 
-       flex_group_count = (sbi->s_groups_count + groups_per_flex - 1) /
-               groups_per_flex;
+       /* We allocate both existing and potentially added groups */
+       flex_group_count = ((sbi->s_groups_count + groups_per_flex - 1) +
+                           ((sbi->s_es->s_reserved_gdt_blocks +1 ) <<
+                             EXT4_DESC_PER_BLOCK_BITS(sb))) /
+                          groups_per_flex;
        sbi->s_flex_groups = kzalloc(flex_group_count *
                                     sizeof(struct flex_groups), GFP_KERNEL);
        if (sbi->s_flex_groups == NULL) {