diff options
Diffstat (limited to 'fs/ext4/super.c')
-rw-r--r-- | fs/ext4/super.c | 9 |
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 | } |