]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
resize2fs: check number of group descriptors only if meta_bg is disabled
authorJan Kara <jack@suse.cz>
Wed, 25 Sep 2024 17:19:26 +0000 (19:19 +0200)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 25 Oct 2024 02:56:21 +0000 (22:56 -0400)
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>
resize/main.c

index f914c0507e9794b515281c3e2d8ac631dde7df14..08a4bbaf7c6575fea09e45a1412d1f069a9bf425 100644 (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) {