From: Jose R. Santos <jrs@xxxxxxxxxx> Relax group descriptor checking. In order for tools such as dump2efs, e2fsck and debugfs to open a ext4 filesystem with FLEX_BG feature enable, some descriptor checking needs to be relaxed. This patch changes the group desciptor checking so that bitmaps and inode tables can be located anywhere in the partitions block range. Eventually, a more thorough check would restrict bitmaps and inode tables to be located at the beginning of a flex block group range. Since the super block does not currently know about the number of groups per flex group, this will do for now. Signed-off-by: Jose R. Santos <jrs@xxxxxxxxxx> -- e2fsck/super.c | 10 ++++++++-- lib/ext2fs/check_desc.c | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/e2fsck/super.c b/e2fsck/super.c index 00a131c..8e58e5c 100644 --- a/e2fsck/super.c +++ b/e2fsck/super.c @@ -578,8 +578,14 @@ void check_super_block(e2fsck_t ctx) for (i = 0, gd=fs->group_desc; i < fs->group_desc_count; i++, gd++) { pctx.group = i; - first_block = ext2fs_group_first_block(fs, i); - last_block = ext2fs_group_last_block(fs, i); + if (EXT2_HAS_INCOMPAT_FEATURE (fs->super, + EXT4_FEATURE_INCOMPAT_FLEX_BG)) { + first_block = fs->super->s_first_data_block; + last_block = fs->super->s_blocks_count; + } else { + first_block = ext2fs_group_first_block(fs, i); + last_block = ext2fs_group_last_block(fs, i); + } if ((gd->bg_block_bitmap < first_block) || (gd->bg_block_bitmap > last_block)) { diff --git a/lib/ext2fs/check_desc.c b/lib/ext2fs/check_desc.c index 146f9e5..bb65c06 100644 --- a/lib/ext2fs/check_desc.c +++ b/lib/ext2fs/check_desc.c @@ -38,8 +38,14 @@ errcode_t ext2fs_check_desc(ext2_filsys fs) EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS); for (i = 0; i < fs->group_desc_count; i++) { - first_block = ext2fs_group_first_block(fs, i); - last_block = ext2fs_group_last_block(fs, i); + if (EXT2_HAS_INCOMPAT_FEATURE (fs->super, EXT4_FEATURE_INCOMPAT_FLEX_BG)) { + first_block = fs->super->s_first_data_block; + last_block = fs->super->s_blocks_count; + } + else { + first_block = ext2fs_group_first_block(fs, i); + last_block = ext2fs_group_last_block(fs, i); + } /* * Check to make sure block bitmap for group is - To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html