aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4/super.c
diff options
context:
space:
mode:
authorJose R. Santos <jrs@us.ibm.com>2007-10-16 18:38:25 -0400
committerTheodore Ts'o <tytso@mit.edu>2007-10-17 18:50:01 -0400
commitce421581794f6593830b056969ad7536ab929b2f (patch)
treef1b225ae41dbd64f9e6e931ee5454842c6b272ba /fs/ext4/super.c
parentc1bddad9491b3941f7ae27eeee1e4f4822fb3169 (diff)
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 <jrs@us.ibm.com> Cc: <linux-ext4@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'fs/ext4/super.c')
-rw-r--r--fs/ext4/super.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index dd4ff9c87358..54450fa1af39 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -1358,13 +1358,17 @@ static int ext4_check_descriptors (struct super_block * sb)
1358 ext4_fsblk_t inode_table; 1358 ext4_fsblk_t inode_table;
1359 struct ext4_group_desc * gdp = NULL; 1359 struct ext4_group_desc * gdp = NULL;
1360 int desc_block = 0; 1360 int desc_block = 0;
1361 int flexbg_flag = 0;
1361 int i; 1362 int i;
1362 1363
1364 if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FLEX_BG))
1365 flexbg_flag = 1;
1366
1363 ext4_debug ("Checking group descriptors"); 1367 ext4_debug ("Checking group descriptors");
1364 1368
1365 for (i = 0; i < sbi->s_groups_count; i++) 1369 for (i = 0; i < sbi->s_groups_count; i++)
1366 { 1370 {
1367 if (i == sbi->s_groups_count - 1) 1371 if (i == sbi->s_groups_count - 1 || flexbg_flag)
1368 last_block = ext4_blocks_count(sbi->s_es) - 1; 1372 last_block = ext4_blocks_count(sbi->s_es) - 1;
1369 else 1373 else
1370 last_block = first_block + 1374 last_block = first_block +
@@ -1409,7 +1413,8 @@ static int ext4_check_descriptors (struct super_block * sb)
1409 le16_to_cpu(gdp->bg_checksum)); 1413 le16_to_cpu(gdp->bg_checksum));
1410 return 0; 1414 return 0;
1411 } 1415 }
1412 first_block += EXT4_BLOCKS_PER_GROUP(sb); 1416 if (!flexbg_flag)
1417 first_block += EXT4_BLOCKS_PER_GROUP(sb);
1413 gdp = (struct ext4_group_desc *) 1418 gdp = (struct ext4_group_desc *)
1414 ((__u8 *)gdp + EXT4_DESC_SIZE(sb)); 1419 ((__u8 *)gdp + EXT4_DESC_SIZE(sb));
1415 } 1420 }