Re: [PATCH] resize2fs: Check number of group descriptors only if meta_bg is disabled

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Sep 25, 2024 at 07:19:26PM +0200, Jan Kara wrote:
> 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@xxxxxxx>

Hi Jan,

Right this makes sense, I tested this using a sparse device:

# create a 1PB sparse device
sudo dmsetup create $SPARSE_DEVICE --table "0 $SIZE_1PB zero"
sudo dmsetup create $SNAPSHOT_NAME --table "0 $SIZE_1PB snapshot /dev/mapper/$SPARSE_DEVICE $BASE_DEVICE P 8"

sudo mkfs.ext4 /dev/mapper/$SNAPSHOT_NAME 512T
sudo resize2fs /dev/mapper/$SNAPSHOT_NAME 513T

This fails originally and works correctly with this patch applied. Infact without
this patch we end up failing 512T -> 512T resize as well which should just be 
a no-op.

Feel free to add:

Reviewed-by: Ojaswin Mujoo <ojaswin@xxxxxxxxxxxxx>

> ---
>  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
> 




[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux