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 <jack@suse.cz>
Reviewed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
Link: https://lore.kernel.org/r/20240925171926.11354-1-jack@suse.cz
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
Jan Kara 2024-09-25 19:19:26 +02:00 committed by Theodore Ts'o
parent 2c1e554316
commit ad56ccaae8

View File

@ -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) {