File resize2fs-Check-number-of-group-descriptors-only-if-.patch of Package e2fsprogs.35844

From 6223d779b4aa1733af2d7a7585a1c962475b5745 Mon Sep 17 00:00:00 2001
From: Jan Kara <jack@suse.cz>
Date: Wed, 25 Sep 2024 19:06:03 +0200
Subject: [PATCH] resize2fs: Check number of group descriptors only if meta_bg
 is disabled
X-Developer-Signature: v=1; a=openpgp-sha256; l=2048; i=jack@suse.cz;
 h=from:subject; bh=ryoE0l3Dbi93e3DsiIytuzvUJi4Da5CFtZYSnYtuFjE=;
 b=owEBbQGS/pANAwAIAZydqgc/ZEDZAcsmYgBm9EYXvrGsWwc+ZDgM2pJFyTG4huornus+kexHD7Qw
 p+w3t4GJATMEAAEIAB0WIQSrWdEr1p4yirVVKBycnaoHP2RA2QUCZvRGFwAKCRCcnaoHP2RA2QkdCA
 CMdgRTusH0EKq+wMeK6RgRecYInS1+mNw7AO6qi7sSfnGjONLgJLweoc0L+30D6o0fhtMzOvEfVUxT
 /xwh/nY7n6A/cw4lDq3MCQtIaAYl0fRFiqiZuUtVlbPbqLB+1dMKzMDYtemHy6uMEa4QxO6OXl7l+t
 aTiapSBUhtCfGBVuOpgMzQ/7kfmNB1+ej5rV4uq3WcALHBEwYhr17uhqMATVnKUfTtSvXsary2lHHR
 3vR9Xio0IzSF4YOqZIkTjbT6m2mlmux5iw/Qtd1fTny3RKXOCk9LwLfrkjk+tm+pGZHyH3EglRrKCs
 7n7FtgukR4dAkRHo9/904i1A2Kemp0
X-Developer-Key: i=jack@suse.cz; a=openpgp;
 fpr=93C6099A142276A28BBE35D815BC833443038D8C

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>
---
 resize/main.c | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/resize/main.c b/resize/main.c
index f914c0507e97..08a4bbaf7c65 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) {
-- 
2.35.3

openSUSE Build Service is sponsored by