From ce421581794f6593830b056969ad7536ab929b2f Mon Sep 17 00:00:00 2001 From: "Jose R. Santos" Date: Tue, 16 Oct 2007 18:38:25 -0400 Subject: ext4: FLEX_BG Kernel support v2. This feature relaxes check restrictions on where each block groups meta data is located within the storage media. This allows for the allocation of bitmaps or inode tables outside the block group boundaries in cases where bad blocks forces us to look for new blocks which the owning block group can not satisfy. This will also allow for new meta-data allocation schemes to improve performance and scalability. Signed-off-by: Jose R. Santos Cc: Signed-off-by: Andrew Morton --- fs/ext4/super.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'fs/ext4') diff --git a/fs/ext4/super.c b/fs/ext4/super.c index dd4ff9c8735..54450fa1af3 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -1358,13 +1358,17 @@ static int ext4_check_descriptors (struct super_block * sb) ext4_fsblk_t inode_table; struct ext4_group_desc * gdp = NULL; int desc_block = 0; + int flexbg_flag = 0; int i; + if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FLEX_BG)) + flexbg_flag = 1; + ext4_debug ("Checking group descriptors"); for (i = 0; i < sbi->s_groups_count; i++) { - if (i == sbi->s_groups_count - 1) + if (i == sbi->s_groups_count - 1 || flexbg_flag) last_block = ext4_blocks_count(sbi->s_es) - 1; else last_block = first_block + @@ -1409,7 +1413,8 @@ static int ext4_check_descriptors (struct super_block * sb) le16_to_cpu(gdp->bg_checksum)); return 0; } - first_block += EXT4_BLOCKS_PER_GROUP(sb); + if (!flexbg_flag) + first_block += EXT4_BLOCKS_PER_GROUP(sb); gdp = (struct ext4_group_desc *) ((__u8 *)gdp + EXT4_DESC_SIZE(sb)); } -- cgit v1.2.3