Patchwork ext4: Update s_free_{inodes,blocks}_count during online resize

login
register
mail settings
Submitter Darrick J. Wong
Date March 6, 2012, 7:40 p.m.
Message ID <20120306194020.GI15164@tux1.beaverton.ibm.com>
Download mbox | patch
Permalink /patch/144992/
State Accepted
Headers show

Comments

Darrick J. Wong - March 6, 2012, 7:40 p.m.
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>
---

 fs/ext4/resize.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)


--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Theodore Ts'o - March 20, 2012, 7:54 p.m.
On Tue, Mar 06, 2012 at 11:40:20AM -0800, Darrick J. Wong wrote:
> 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>

Thanks, applied.

					- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/fs/ext4/resize.c b/fs/ext4/resize.c
index f9d948f..a97ede4 100644
--- a/fs/ext4/resize.c
+++ b/fs/ext4/resize.c
@@ -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 */