@@ -84,7 +84,7 @@ errcode_t ext2fs_allocate_group_table(ext2_filsys fs, dgrp_t group,
errcode_t retval;
blk_t group_blk, start_blk, last_blk, new_blk, blk;
dgrp_t last_grp = 0;
- int j, rem_grps = 0, flexbg_size = 0;
+ int j, rem_grps = 0, flexbg_size = 0, inode_table_size = 0;
group_blk = ext2fs_group_first_block(fs, group);
last_blk = ext2fs_group_last_block(fs, group);
@@ -181,10 +181,14 @@ errcode_t ext2fs_allocate_group_table(ext2_filsys fs, dgrp_t group,
blk_t prev_block = 0;
if (group && fs->group_desc[group-1].bg_inode_table)
prev_block = fs->group_desc[group-1].bg_inode_table;
+ if ((group+1) == fs->group_desc_count &&
+ (fs->group_desc_count % flexbg_size) == 1)
+ inode_table_size = fs->inode_blocks_per_group;
+ else
+ inode_table_size = fs->inode_blocks_per_group * rem_grps;
group_blk = flexbg_offset(fs, group, prev_block, bmap,
flexbg_size * 2,
- fs->inode_blocks_per_group *
- rem_grps,
+ inode_table_size,
fs->inode_blocks_per_group);
last_blk = ext2fs_group_last_block(fs, last_grp);
}