Re: [PATCH] xfs: introduce xfs_validate_stripe_factors()

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

 



On Fri, Oct 09, 2020 at 01:05:46PM +0800, Gao Xiang wrote:
> Introduce a common helper to consolidate stripe validation process.
> Also make kernel code xfs_validate_sb_common() use it first.
> 
> Signed-off-by: Gao Xiang <hsiangkao@xxxxxxxxxx>
> ---
> 
> kernel side of:
> https://lore.kernel.org/r/20201007140402.14295-3-hsiangkao@xxxxxxx
> with update suggested by Darrick:
>  - stretch columns for commit message;
>  - add comments to hasdalign check;
>  - break old sunit / swidth != 0 check into two seperate checks;
>  - update an error message description.
> 
> also use bytes for sunit / swidth representation, so users can
> see values in the unique unit.
> 
> see
> https://lore.kernel.org/r/20201007140402.14295-1-hsiangkao@xxxxxxx
> for the background.
> 
>  fs/xfs/libxfs/xfs_sb.c | 65 +++++++++++++++++++++++++++++++++++-------
>  fs/xfs/libxfs/xfs_sb.h |  3 ++
>  2 files changed, 57 insertions(+), 11 deletions(-)
> 
> diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c
> index 5aeafa59ed27..cb2a7aa0ad51 100644
> --- a/fs/xfs/libxfs/xfs_sb.c
> +++ b/fs/xfs/libxfs/xfs_sb.c
...
> @@ -1233,3 +1230,49 @@ xfs_sb_get_secondary(
>  	*bpp = bp;
>  	return 0;
>  }
> +
> +/*
> + * sunit, swidth, sectorsize(optional with 0) should be all in bytes,
> + * so users won't be confused by values in error messages.
> + */
> +bool
> +xfs_validate_stripe_factors(

xfs_validate_stripe_geometry() perhaps?

> +	struct xfs_mount	*mp,
> +	__s64			sunit,
> +	__s64			swidth,
> +	int			sectorsize)
> +{
> +	if (sectorsize && sunit % sectorsize) {
> +		xfs_notice(mp,
> +"stripe unit (%lld) must be a multiple of the sector size (%d)",
> +			   sunit, sectorsize);
> +		return false;
> +	}
> +
> +	if (sunit && !swidth) {
> +		xfs_notice(mp,
> +"invalid stripe unit (%lld) and stripe width of 0", sunit);
> +		return false;
> +	}
> +
> +	if (!sunit && swidth) {
> +		xfs_notice(mp,
> +"invalid stripe width (%lld) and stripe unit of 0", swidth);
> +		return false;
> +	}

Seems like these two could be combined into one check that prints
something like:

	invalid stripe width (%lld) and stripe unit (%lld)

> +
> +	if (sunit > swidth) {
> +		xfs_notice(mp,
> +"stripe unit (%lld) is larger than the stripe width (%lld)", sunit, swidth);
> +		return false;
> +	}
> +
> +	if (sunit && (swidth % sunit)) {
> +		xfs_notice(mp,
> +"stripe width (%lld) must be a multiple of the stripe unit (%lld)",
> +			   swidth, sunit);
> +		return false;
> +	}
> +	return true;
> +}
> +

Trailing whitespace here.

Otherwise looks reasonable outside of those nits.

Brian

> diff --git a/fs/xfs/libxfs/xfs_sb.h b/fs/xfs/libxfs/xfs_sb.h
> index 92465a9a5162..2d3504eb9886 100644
> --- a/fs/xfs/libxfs/xfs_sb.h
> +++ b/fs/xfs/libxfs/xfs_sb.h
> @@ -42,4 +42,7 @@ extern int	xfs_sb_get_secondary(struct xfs_mount *mp,
>  				struct xfs_trans *tp, xfs_agnumber_t agno,
>  				struct xfs_buf **bpp);
>  
> +extern bool	xfs_validate_stripe_factors(struct xfs_mount *mp,
> +				__s64 sunit, __s64 swidth, int sectorsize);
> +
>  #endif	/* __XFS_SB_H__ */
> -- 
> 2.18.1
> 




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux