From: Jan Kara Date: Wed, 25 Sep 2024 17:19:26 +0000 (+0200) Subject: resize2fs: check number of group descriptors only if meta_bg is disabled X-Git-Tag: v1.47.2-rc1~15 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ad56ccaae8b6d69350273c01ae2f72a66df245e0;p=thirdparty%2Fe2fsprogs.git resize2fs: check number of group descriptors only if meta_bg is disabled When meta_bg feature is enabled, the total number of group descriptors is not really limiting the filesystem size. So there's no reason to check it in that case. This allows resize2fs to resize filesystems past 256TB boundary similarly as the kernel can do it. Signed-off-by: Jan Kara Reviewed-by: Ojaswin Mujoo Link: https://lore.kernel.org/r/20240925171926.11354-1-jack@suse.cz Signed-off-by: Theodore Ts'o --- diff --git a/resize/main.c b/resize/main.c index f914c050..08a4bbaf 100644 --- a/resize/main.c +++ b/resize/main.c @@ -270,8 +270,6 @@ int main (int argc, char ** argv) long sysval; int len, mount_flags; char *mtpt, *undo_file = NULL; - dgrp_t new_group_desc_count; - unsigned long new_desc_blocks; #ifdef ENABLE_NLS setlocale(LC_MESSAGES, ""); @@ -551,17 +549,22 @@ int main (int argc, char ** argv) new_size &= ~((blk64_t)(1ULL << fs->cluster_ratio_bits) - 1); } - new_group_desc_count = ext2fs_div64_ceil(new_size - - fs->super->s_first_data_block, - EXT2_BLOCKS_PER_GROUP(fs->super)); - new_desc_blocks = ext2fs_div_ceil(new_group_desc_count, - EXT2_DESC_PER_BLOCK(fs->super)); - if ((new_desc_blocks + fs->super->s_first_data_block) > - EXT2_BLOCKS_PER_GROUP(fs->super)) { - com_err(program_name, 0, - _("New size results in too many block group " - "descriptors.\n")); - goto errout; + if (!ext2fs_has_feature_meta_bg(fs->super)) { + dgrp_t new_group_desc_count; + unsigned long new_desc_blocks; + + new_group_desc_count = ext2fs_div64_ceil(new_size - + fs->super->s_first_data_block, + EXT2_BLOCKS_PER_GROUP(fs->super)); + new_desc_blocks = ext2fs_div_ceil(new_group_desc_count, + EXT2_DESC_PER_BLOCK(fs->super)); + if ((new_desc_blocks + fs->super->s_first_data_block) > + EXT2_BLOCKS_PER_GROUP(fs->super)) { + com_err(program_name, 0, + _("New size results in too many block group " + "descriptors.\n")); + goto errout; + } } if (!force && new_size < min_size) {