]> err.no Git - linux-2.6/commitdiff
Ext4: Fix online resize block group descriptor corruption
authorFrederic Bohe <frederic.bohe@bull.net>
Fri, 20 Jun 2008 15:48:48 +0000 (11:48 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 20 Jun 2008 15:48:48 +0000 (11:48 -0400)
This is the patch for the group descriptor table corruption during
online resize pointed out by Theodore Tso.  The problem was caused by
the fact that the ext4 group descriptor can be either 32 or 64 bytes
long.  Only the 64 bytes structure was taken into account.

Signed-off-by: Frederic Bohe <frederic.bohe@bull.net>
Signed-off-by: Mingming Cao <cmm@us.ibm.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
fs/ext4/resize.c

index 9ecb92f68543ab12f5531a7cf4cb2c6233d2258e..9ff7b1c04239d6581a12f0dd18a73538a0695abc 100644 (file)
@@ -855,7 +855,8 @@ int ext4_group_add(struct super_block *sb, struct ext4_new_group_data *input)
         */
 
        /* Update group descriptor block for new group */
-       gdp = (struct ext4_group_desc *)primary->b_data + gdb_off;
+       gdp = (struct ext4_group_desc *)((char *)primary->b_data +
+                                        gdb_off * EXT4_DESC_SIZE(sb));
 
        ext4_block_bitmap_set(sb, gdp, input->block_bitmap); /* LV FIXME */
        ext4_inode_bitmap_set(sb, gdp, input->inode_bitmap); /* LV FIXME */