ext4: update s_free_{inodes,blocks}_count during online resize
authorDarrick J. Wong <djwong@us.ibm.com>
Tue, 20 Mar 2012 19:46:11 +0000 (15:46 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 20 Mar 2012 19:46:11 +0000 (15:46 -0400)
When we're doing an online resize of an ext4 filesystem, we need to
update the free inode and block counts in the superblock so that fsck
doesn't complain.

Signed-off-by: Darrick J. Wong <djwong@us.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/resize.c

index b6ad461..59fa0be 100644 (file)
@@ -1163,8 +1163,11 @@ static void ext4_update_super(struct super_block *sb,
        do_div(reserved_blocks, 100);
 
        ext4_blocks_count_set(es, ext4_blocks_count(es) + blocks_count);
+       ext4_free_blocks_count_set(es, ext4_free_blocks_count(es) + free_blocks);
        le32_add_cpu(&es->s_inodes_count, EXT4_INODES_PER_GROUP(sb) *
                     flex_gd->count);
+       le32_add_cpu(&es->s_free_inodes_count, EXT4_INODES_PER_GROUP(sb) *
+                    flex_gd->count);
 
        /*
         * We need to protect s_groups_count against other CPUs seeing
@@ -1465,6 +1468,7 @@ static int ext4_group_extend_no_check(struct super_block *sb,
        }
 
        ext4_blocks_count_set(es, o_blocks_count + add);
+       ext4_free_blocks_count_set(es, ext4_free_blocks_count(es) + add);
        ext4_debug("freeing blocks %llu through %llu\n", o_blocks_count,
                   o_blocks_count + add);
        /* We add the blocks to the bitmap and set the group need init bit */