Re: [PATCH 2/6] mkfs: replace variables with opts table: -b,d,s options

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

 



On Fri, Aug 11, 2017 at 02:30:54PM +0200, Jan Tulak wrote:
> Remove variables that can be replaced with a direct access to the opts
> table, so we have it all in a single place, acessible from anywhere.
> 
> In future, we can remove some instances where we are passing values as
> arguments to helper functions, when we have the values in the opts
> struct and could pass only the struct.  But for now, limit the changes
> to simple replacement without any change in the logic.
> 
> This is first of multiple similar patches that do the same, but for
> other options.
> 
> Signed-off-by: Jan Tulak <jtulak@xxxxxxxxxx>
> 
> ---
> CHANGES:
> * remove collaterals which are set during parsing
> ---
>  mkfs/xfs_mkfs.c | 792 +++++++++++++++++++++++++++++++++-----------------------
>  1 file changed, 463 insertions(+), 329 deletions(-)
> 
> diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
> index 12ffa715..7f7f4554 100644
> --- a/mkfs/xfs_mkfs.c
> +++ b/mkfs/xfs_mkfs.c
> @@ -32,13 +32,6 @@ static void respec(char opt, char *tab[], int idx);
>  static void unknown(char opt, char *s);
>  static int  ispow2(unsigned int i);
>  
> -/*
> - * The configured block and sector sizes are defined as global variables so
> - * that they don't need to be passed to functions that require them.
> - */
> -unsigned int		blocksize;
> -unsigned int		sectorsize;
> -
>  #define MAX_OPTS	16
>  #define MAX_SUBOPTS	16
>  #define SUBOPT_NEEDS_VAL	(-1LL)
> @@ -740,7 +733,8 @@ struct opt_params {
>  /*
>   * Use this macro before we have superblock and mount structure
>   */
> -#define	DTOBT(d)	((xfs_rfsblock_t)((d) >> (blocklog - BBSHIFT)))
> +#define	DTOBT(d) \
> +	((xfs_rfsblock_t)((d) >> (get_conf_val(OPT_B, B_LOG) - BBSHIFT)))
>  
>  /*
>   * Use this for block reservations needed for mkfs's conditions
> @@ -1092,7 +1086,8 @@ getnum(
>  	 * number.
>  	 */
>  	if (sp->convert)
> -		c = cvtnum(blocksize, sectorsize, str);
> +		c = cvtnum(get_conf_val(OPT_B, B_SIZE),
> +			   get_conf_val(OPT_D, D_SECTSIZE), str);
>  	else {
>  		char		*str_end;
>  
> @@ -1179,16 +1174,16 @@ calc_stripe_factors(
>  		*lsunit = (int)BTOBBT(lsu);
>  
>  	/* verify if lsu/lsunit is a multiple block size */
> -	if (lsu % blocksize != 0) {
> +	if (lsu % get_conf_val(OPT_B, B_SIZE) != 0) {
>  		fprintf(stderr,
> -_("log stripe unit (%d) must be a multiple of the block size (%d)\n"),
> -		lsu, blocksize);
> +_("log stripe unit (%d) must be a multiple of the block size (%lld)\n"),
> +		lsu, get_conf_val(OPT_B, B_SIZE));
>  		exit(1);
>  	}
> -	if ((BBTOB(*lsunit) % blocksize != 0)) {
> +	if ((BBTOB(*lsunit) % get_conf_val(OPT_B, B_SIZE) != 0)) {
>  		fprintf(stderr,
> -_("log stripe unit (%d) must be a multiple of the block size (%d)\n"),
> -		BBTOB(*lsunit), blocksize);
> +_("log stripe unit (%d) must be a multiple of the block size (%lld)\n"),
> +		BBTOB(*lsunit), get_conf_val(OPT_B, B_SIZE));
>  		exit(1);
>  	}
>  }
> @@ -1344,7 +1339,7 @@ validate_log_size(uint64_t logblocks, int blocklog, int min_logblocks)
>  			(long long)logblocks, XFS_MAX_LOG_BLOCKS);
>  		usage();
>  	}
> -	if ((logblocks << blocklog) > XFS_MAX_LOG_BYTES) {
> +	if ((logblocks << get_conf_val(OPT_B, B_LOG)) > XFS_MAX_LOG_BYTES) {
>  		fprintf(stderr,
>  	_("log size %lld bytes too large, maximum size is %lld bytes\n"),
>  			(long long)(logblocks << blocklog), XFS_MAX_LOG_BYTES);
> @@ -1438,9 +1433,9 @@ validate_ag_geometry(
>  	}
>  
>  	/*
> -	 * If agcount is too large, make it smaller.
> +	 * If D_AGCOUNT is too large, make it smaller.
>  	 */
> -	if (agcount > XFS_MAX_AGNUMBER + 1) {
> +	if (get_conf_val(OPT_D, D_AGCOUNT) > XFS_MAX_AGNUMBER + 1) {
>  		fprintf(stderr,
>  	_("%lld allocation groups is too many, maximum is %lld\n"),
>  			(long long)agcount, (long long)XFS_MAX_AGNUMBER + 1);
> @@ -1674,15 +1669,12 @@ main(
>  	int			argc,
>  	char			**argv)
>  {
> -	uint64_t		agcount;
>  	xfs_agf_t		*agf;
>  	xfs_agi_t		*agi;
>  	xfs_agnumber_t		agno;
> -	uint64_t		agsize;
>  	xfs_alloc_rec_t		*arec;
>  	struct xfs_btree_block	*block;
>  	int			blflag;
> -	int			blocklog;
>  	int			bsflag;
>  	int			bsize;
>  	xfs_buf_t		*buf;
> @@ -1693,11 +1685,6 @@ main(
>  	char			*dfile;
>  	int			dirblocklog;
>  	int			dirblocksize;
> -	uint64_t		dbytes;
> -	int			dsu;
> -	int			dsw;
> -	int			dsunit;
> -	int			dswidth;
>  	int			dsflag;
>  	bool			force_overwrite;
>  	struct fsxattr		fsx;
> @@ -1735,7 +1722,6 @@ main(
>  	xfs_mount_t		mbuf;
>  	xfs_extlen_t		nbmblocks;
>  	int			nlflag;
> -	int			nodsflag;
>  	int			norsflag;
>  	xfs_alloc_rec_t		*nrec;
>  	int			nsflag;
> @@ -1753,7 +1739,6 @@ main(
>  	uint64_t		rtextbytes;
>  	char			*rtfile;
>  	xfs_sb_t		*sbp;
> -	int			sectorlog;
>  	uint64_t		sector_mask;
>  	int			slflag;
>  	int			ssflag;
> @@ -1786,12 +1771,11 @@ main(
>  	textdomain(PACKAGE);
>  
>  	blflag = bsflag = slflag = ssflag = lslflag = lssflag = 0;
> -	blocklog = blocksize = 0;
> -	sectorlog = lsectorlog = 0;
> -	sectorsize = lsectorsize = 0;
> -	agsize = daflag = dasize = dblocks = 0;
> -	ilflag = imflag = ipflag = isflag = 0;
> -	liflag = laflag = lsflag = lsuflag = lsunitflag = ldflag = lvflag = 0;
> +	lsectorlog = 0;
> +	lsectorsize = 0;
> +	dasize = dblocks = 0;
> +	daflag = ilflag = imflag = ipflag = isflag = false;
> +	liflag = laflag = lsflag = lsuflag = lsunitflag = ldflag = lvflag = false;
>  	loginternal = 1;
>  	logagno = logblocks = rtblocks = rtextblocks = 0;
>  	Nflag = nlflag = nsflag = nvflag = 0;
> @@ -1800,10 +1784,10 @@ main(
>  	imaxpct = inodelog = inopblock = isize = 0;
>  	dfile = logfile = rtfile = NULL;
>  	protofile = NULL;
> -	rtbytes = rtextbytes = logbytes = dbytes = 0;
> -	dsu = dsw = dsunit = dswidth = lalign = lsu = lsunit = 0;
> -	dsflag = nodsflag = norsflag = 0;
> -	force_overwrite = 0;
> +	rtbytes = rtextbytes = logbytes = 0;
> +	lalign = lsu = lsunit = 0;
> +	dsflag = norsflag = false;
> +	force_overwrite = false;
>  	worst_freelist = 0;
>  	memset(&fsx, 0, sizeof(fsx));
>  
> @@ -1826,16 +1810,13 @@ main(
>  
>  				switch (getsubopt(&p, subopts, &value)) {
>  				case B_LOG:
> -					blocklog = parse_conf_val(OPT_B, B_LOG,
> -								  value);
> -					blocksize = 1 << blocklog;
> +					parse_conf_val(OPT_B, B_LOG,
> +							     value);
>  					blflag = 1;
>  					break;
>  				case B_SIZE:
> -					blocksize = parse_conf_val(OPT_B,
> -								   B_SIZE,
> -								   value);
> -					blocklog = libxfs_highbit32(blocksize);
> +					parse_conf_val(OPT_B, B_SIZE,
> +							     value);
>  					bsflag = 1;
>  					break;
>  				default:
> @@ -1852,15 +1833,12 @@ main(
>  
>  				switch (getsubopt(&p, subopts, &value)) {
>  				case D_AGCOUNT:
> -					agcount = parse_conf_val(OPT_D,
> -								 D_AGCOUNT,
> -								 value);
> +					parse_conf_val(OPT_D, D_AGCOUNT,
> +						       value);
>  					daflag = 1;
>  					break;
>  				case D_AGSIZE:
> -					agsize = parse_conf_val(OPT_D,
> -								D_AGSIZE,
> -								value);
> +					parse_conf_val(OPT_D, D_AGSIZE, value);
>  					dasize = 1;
>  					break;
>  				case D_FILE:
> @@ -1874,48 +1852,36 @@ main(
>  					set_conf_val(OPT_D, D_NAME,  1);
>  					break;
>  				case D_SIZE:
> -					dbytes = parse_conf_val(OPT_D, D_SIZE,
> -								value);
> +					parse_conf_val(OPT_D, D_SIZE, value);
>  					break;
>  				case D_SUNIT:
> -					dsunit = parse_conf_val(OPT_D, D_SUNIT,
> -								value);
> +					parse_conf_val(OPT_D, D_SUNIT, value);
>  					dsflag = 1;
>  					break;
>  				case D_SWIDTH:
> -					dswidth = parse_conf_val(OPT_D,
> -								 D_SWIDTH,
> -								 value);
> +					parse_conf_val(OPT_D, D_SWIDTH, value);
>  					dsflag = 1;
>  					break;
>  				case D_SU:
> -					dsu = parse_conf_val(OPT_D, D_SU,
> -							     value);
> +					parse_conf_val(OPT_D, D_SU, value);
>  					dsflag = 1;
>  					break;
>  				case D_SW:
> -					dsw = parse_conf_val(OPT_D, D_SW,
> -							     value);
> +					parse_conf_val(OPT_D, D_SW, value);
>  					dsflag = 1;
>  					break;
>  				case D_NOALIGN:
> -					nodsflag = parse_conf_val(OPT_D,
> -								  D_NOALIGN,
> -								  value);
> +					parse_conf_val(OPT_D, D_NOALIGN,
> +						       value);
>  					break;
>  				case D_SECTLOG:
> -					sectorlog = parse_conf_val(OPT_D,
> -								   D_SECTLOG,
> -								   value);
> -					sectorsize = 1 << sectorlog;
> +					parse_conf_val(OPT_D, D_SECTLOG,
> +							     value);
>  					slflag = 1;
>  					break;
>  				case D_SECTSIZE:
> -					sectorsize = parse_conf_val(OPT_D,
> -								    D_SECTSIZE,
> -								    value);
> -					sectorlog =
> -						libxfs_highbit32(sectorsize);
> +					parse_conf_val(OPT_D, D_SECTSIZE,
> +							     value);
>  					ssflag = 1;
>  					break;
>  				case D_RTINHERIT:
> @@ -2245,6 +2211,7 @@ main(
>  				char	**subopts =
>  						(char **)opts[OPT_S].subopts;
>  				char	*value;
> +				uint64_t tmp;
>  
>  				switch (getsubopt(&p, subopts, &value)) {
>  				case S_LOG:
> @@ -2253,12 +2220,12 @@ main(
>  						conflict('s', subopts,
>  							 S_SECTSIZE,
>  							 S_SECTLOG);
> -					sectorlog = parse_conf_val(OPT_S,
> +					tmp = parse_conf_val(OPT_S,
>  								   S_SECTLOG,
>  								   value);
> -					lsectorlog = sectorlog;
> -					sectorsize = 1 << sectorlog;
> -					lsectorsize = sectorsize;
> +
> +					lsectorlog = tmp;
> +					lsectorsize = tmp;
>  					lslflag = slflag = 1;
>  					break;
>  				case S_SIZE:
> @@ -2267,13 +2234,12 @@ main(
>  						conflict('s', subopts,
>  							 S_SECTLOG,
>  							 S_SECTSIZE);
> -					sectorsize = parse_conf_val(OPT_S,
> +					tmp = parse_conf_val(OPT_S,
>  								    S_SECTSIZE,
>  								    value);
> -					lsectorsize = sectorsize;
> -					sectorlog =
> -						libxfs_highbit32(sectorsize);
> -					lsectorlog = sectorlog;
> +
> +					lsectorlog = libxfs_highbit32(tmp);
> +					lsectorsize = tmp;
>  					lssflag = ssflag = 1;
>  					break;
>  				default:
> @@ -2298,19 +2264,22 @@ main(
>  		dfile = xi.dname;
>  
>  	/*
> -	 * Blocksize and sectorsize first, other things depend on them
> +	 * Blocksize and D_SECTSIZE first, other things depend on them
>  	 * For RAID4/5/6 we want to align sector size and block size,
>  	 * so we need to start with the device geometry extraction too.
>  	 */
>  	if (!blflag && !bsflag) {
> -		blocklog = XFS_DFL_BLOCKSIZE_LOG;
> -		blocksize = 1 << XFS_DFL_BLOCKSIZE_LOG;
> +		set_conf_val(OPT_B, B_LOG, XFS_DFL_BLOCKSIZE_LOG);
> +		set_conf_val(OPT_B, B_SIZE, 1 << XFS_DFL_BLOCKSIZE_LOG);
>  	}
> -	if (blocksize < XFS_MIN_BLOCKSIZE || blocksize > XFS_MAX_BLOCKSIZE) {
> -		fprintf(stderr, _("illegal block size %d\n"), blocksize);
> +	if (get_conf_val(OPT_B, B_SIZE) < XFS_MIN_BLOCKSIZE ||
> +	    get_conf_val(OPT_B, B_SIZE) > XFS_MAX_BLOCKSIZE) {
> +		fprintf(stderr, _("illegal block size %lld\n"),
> +			get_conf_val(OPT_B, B_SIZE));
>  		usage();
>  	}
> -	if (sb_feat.crcs_enabled && blocksize < XFS_MIN_CRC_BLOCKSIZE) {
> +	if (sb_feat.crcs_enabled &&
> +	    get_conf_val(OPT_B, B_SIZE) < XFS_MIN_CRC_BLOCKSIZE) {
>  		fprintf(stderr,
>  _("Minimum block size for CRC enabled filesystems is %d bytes.\n"),
>  			XFS_MIN_CRC_BLOCKSIZE);
> @@ -2322,12 +2291,12 @@ _("Minimum block size for CRC enabled filesystems is %d bytes.\n"),
>  	}
>  
>  	if (!slflag && !ssflag) {
> -		sectorlog = XFS_MIN_SECTORSIZE_LOG;
> -		sectorsize = XFS_MIN_SECTORSIZE;
> +		set_conf_val(OPT_D, D_SECTLOG, XFS_MIN_SECTORSIZE_LOG);
> +		set_conf_val(OPT_D, D_SECTSIZE, XFS_MIN_SECTORSIZE);
>  	}
>  	if (!lslflag && !lssflag) {
> -		lsectorlog = sectorlog;
> -		lsectorsize = sectorsize;
> +		lsectorlog = get_conf_val(OPT_D, D_SECTLOG);
> +		lsectorsize = get_conf_val(OPT_D, D_SECTSIZE);
>  	}
>  
>  	/*
> @@ -2337,7 +2306,8 @@ _("Minimum block size for CRC enabled filesystems is %d bytes.\n"),
>  	 * sector size mismatches between the new filesystem and the underlying
>  	 * host filesystem.
>  	 */
> -	check_device_type(dfile, &xi.disfile, !dbytes, !dfile,
> +	check_device_type(dfile, &xi.disfile, !get_conf_val(OPT_D, D_SIZE),
> +			  !dfile,
>  			  Nflag ? NULL : &xi.dcreat, force_overwrite, "d");
>  	if (!loginternal)
>  		check_device_type(xi.logname, &xi.lisfile, !logbytes,
> @@ -2366,50 +2336,58 @@ _("Minimum block size for CRC enabled filesystems is %d bytes.\n"),
>  		if (!ft.psectorsize)
>  			ft.psectorsize = ft.lsectorsize;
>  
> -		sectorsize = ft.psectorsize ? ft.psectorsize :
> -					      XFS_MIN_SECTORSIZE;
> +		set_conf_val(OPT_D, D_SECTSIZE,
> +			     ft.psectorsize ? ft.psectorsize :
> +					      XFS_MIN_SECTORSIZE);
>  
> -		if ((blocksize < sectorsize) && (blocksize >= ft.lsectorsize)) {
> +		if ((get_conf_val(OPT_B, B_SIZE) <
> +		     get_conf_val(OPT_D, D_SECTSIZE)) &&
> +		    (get_conf_val(OPT_B, B_SIZE) >= ft.lsectorsize)) {
>  			fprintf(stderr,
> -_("specified blocksize %d is less than device physical sector size %d\n"),
> -				blocksize, ft.psectorsize);
> +_("specified blocksize %lld is less than device physical sector size %d\n"),
> +				get_conf_val(OPT_B, B_SIZE), ft.psectorsize);
>  			fprintf(stderr,
>  _("switching to logical sector size %d\n"),
>  				ft.lsectorsize);
> -			sectorsize = ft.lsectorsize ? ft.lsectorsize :
> -						      XFS_MIN_SECTORSIZE;
> +			set_conf_val(OPT_D, D_SECTSIZE,
> +				     ft.lsectorsize ? ft.lsectorsize :
> +						      XFS_MIN_SECTORSIZE);
>  		}
>  	}
>  
>  	if (!ssflag) {
> -		sectorlog = libxfs_highbit32(sectorsize);
> +		set_conf_val(OPT_D, D_SECTLOG,
> +			     libxfs_highbit32(get_conf_val(OPT_D, D_SECTSIZE)));
>  		if (loginternal) {
> -			lsectorsize = sectorsize;
> -			lsectorlog = sectorlog;
> +			lsectorsize = get_conf_val(OPT_D, D_SECTSIZE);
> +			lsectorlog = get_conf_val(OPT_D, D_SECTLOG);
>  		}
>  	}
>  
> -	if (sectorsize < XFS_MIN_SECTORSIZE ||
> -	    sectorsize > XFS_MAX_SECTORSIZE || sectorsize > blocksize) {
> +	if (get_conf_val(OPT_D, D_SECTSIZE) < XFS_MIN_SECTORSIZE ||
> +	    get_conf_val(OPT_D, D_SECTSIZE) > XFS_MAX_SECTORSIZE ||
> +	    get_conf_val(OPT_D, D_SECTSIZE) > get_conf_val(OPT_B, B_SIZE)) {
>  		if (ssflag)
> -			fprintf(stderr, _("illegal sector size %d\n"), sectorsize);
> +			fprintf(stderr, _("illegal sector size %lld\n"),
> +				get_conf_val(OPT_D, D_SECTSIZE));
>  		else
>  			fprintf(stderr,
> -_("block size %d cannot be smaller than logical sector size %d\n"),
> -				blocksize, ft.lsectorsize);
> +_("block size %lld cannot be smaller than logical sector size %d\n"),
> +				get_conf_val(OPT_B, B_SIZE), ft.lsectorsize);
>  		usage();
>  	}
> -	if (sectorsize < ft.lsectorsize) {
> -		fprintf(stderr, _("illegal sector size %d; hw sector is %d\n"),
> -			sectorsize, ft.lsectorsize);
> +	if (get_conf_val(OPT_D, D_SECTSIZE) < ft.lsectorsize) {
> +		fprintf(stderr, _("illegal sector size %lld; hw sector is %d\n"),
> +			get_conf_val(OPT_D, D_SECTSIZE), ft.lsectorsize);
>  		usage();
>  	}
>  	if (lsectorsize < XFS_MIN_SECTORSIZE ||
> -	    lsectorsize > XFS_MAX_SECTORSIZE || lsectorsize > blocksize) {
> +	    lsectorsize > XFS_MAX_SECTORSIZE ||
> +	    lsectorsize > get_conf_val(OPT_B, B_SIZE)) {
>  		fprintf(stderr, _("illegal log sector size %d\n"), lsectorsize);
>  		usage();
>  	} else if (lsectorsize > XFS_MIN_SECTORSIZE && !lsu && !lsunit) {
> -		lsu = blocksize;
> +		lsu = get_conf_val(OPT_B, B_SIZE);
>  		sb_feat.log_version = 2;
>  	}
>  
> @@ -2511,37 +2489,41 @@ _("rmapbt not supported with realtime devices\n"));
>  	}
>  
>  	if (nsflag || nlflag) {
> -		if (dirblocksize < blocksize ||
> +		if (dirblocksize < get_conf_val(OPT_B, B_SIZE) ||
>  					dirblocksize > XFS_MAX_BLOCKSIZE) {
>  			fprintf(stderr, _("illegal directory block size %d\n"),
>  				dirblocksize);
>  			usage();
>  		}
>  	} else {
> -		if (blocksize < (1 << XFS_MIN_REC_DIRSIZE))
> +		if (get_conf_val(OPT_B, B_SIZE) < (1 << XFS_MIN_REC_DIRSIZE))
>  			dirblocklog = XFS_MIN_REC_DIRSIZE;
>  		else
> -			dirblocklog = blocklog;
> +			dirblocklog = get_conf_val(OPT_B, B_LOG);
>  		dirblocksize = 1 << dirblocklog;
>  	}
>  
>  
> -	if (dbytes) {
> -		if (dbytes % XFS_MIN_BLOCKSIZE) {
> +	if (get_conf_val(OPT_D, D_SIZE)) {
> +		if (get_conf_val(OPT_D, D_SIZE) % XFS_MIN_BLOCKSIZE) {
>  			fprintf(stderr,
>  			_("illegal data length %lld, not a multiple of %d\n"),
> -				(long long)dbytes, XFS_MIN_BLOCKSIZE);
> +				get_conf_val(OPT_D, D_SIZE), XFS_MIN_BLOCKSIZE);
>  			usage();
>  		}
> -		dblocks = (xfs_rfsblock_t)(dbytes >> blocklog);
> -		if (dbytes % blocksize)
> +		dblocks = (xfs_rfsblock_t)(get_conf_val(OPT_D, D_SIZE) >>
> +					   get_conf_val(OPT_B, B_LOG));
> +		if (get_conf_val(OPT_D, D_SIZE) % get_conf_val(OPT_B, B_SIZE))
>  			fprintf(stderr, _("warning: "
> -	"data length %lld not a multiple of %d, truncated to %lld\n"),
> -				(long long)dbytes, blocksize,
> -				(long long)(dblocks << blocklog));
> +	"data length %lld not a multiple of %lld, truncated to %lld\n"),
> +				get_conf_val(OPT_D, D_SIZE),
> +				get_conf_val(OPT_B, B_SIZE),
> +				(long long)(dblocks <<
> +					   get_conf_val(OPT_B, B_LOG)));
>  	}
>  	if (ipflag) {
> -		inodelog = blocklog - libxfs_highbit32(inopblock);
> +		inodelog = get_conf_val(OPT_B, B_LOG) -
> +			libxfs_highbit32(inopblock);

Indentation problem here (two tabs, not one).

Otherwise looks ok,
Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>

--D

>  		isize = 1 << inodelog;
>  	} else if (!ilflag && !isflag) {
>  		inodelog = sb_feat.crcs_enabled ? XFS_DINODE_DFL_CRC_LOG
> @@ -2562,12 +2544,14 @@ _("rmapbt not supported with realtime devices\n"));
>  				(long long)logbytes, XFS_MIN_BLOCKSIZE);
>  			usage();
>  		}
> -		logblocks = (xfs_rfsblock_t)(logbytes >> blocklog);
> -		if (logbytes % blocksize)
> +		logblocks = (xfs_rfsblock_t)(logbytes >>
> +					     get_conf_val(OPT_B, B_LOG));
> +		if (logbytes % get_conf_val(OPT_B, B_SIZE))
>  			fprintf(stderr,
> -	_("warning: log length %lld not a multiple of %d, truncated to %lld\n"),
> -				(long long)logbytes, blocksize,
> -				(long long)(logblocks << blocklog));
> +	_("warning: log length %lld not a multiple of %lld, truncated to %lld\n"),
> +				(long long)logbytes, get_conf_val(OPT_B, B_SIZE),
> +				(long long)(logblocks <<
> +					   get_conf_val(OPT_B, B_LOG)));
>  	}
>  	if (rtbytes) {
>  		if (rtbytes % XFS_MIN_BLOCKSIZE) {
> @@ -2576,24 +2560,27 @@ _("rmapbt not supported with realtime devices\n"));
>  				(long long)rtbytes, XFS_MIN_BLOCKSIZE);
>  			usage();
>  		}
> -		rtblocks = (xfs_rfsblock_t)(rtbytes >> blocklog);
> -		if (rtbytes % blocksize)
> +		rtblocks = (xfs_rfsblock_t)(rtbytes >>
> +					    get_conf_val(OPT_B, B_LOG));
> +		if (rtbytes % get_conf_val(OPT_B, B_SIZE))
>  			fprintf(stderr,
> -	_("warning: rt length %lld not a multiple of %d, truncated to %lld\n"),
> -				(long long)rtbytes, blocksize,
> -				(long long)(rtblocks << blocklog));
> +	_("warning: rt length %lld not a multiple of %lld, truncated to %lld\n"),
> +				(long long)rtbytes, get_conf_val(OPT_B, B_SIZE),
> +				(long long)(rtblocks <<
> +					   get_conf_val(OPT_B, B_LOG)));
>  	}
>  	/*
>  	 * If specified, check rt extent size against its constraints.
>  	 */
>  	if (rtextbytes) {
> -		if (rtextbytes % blocksize) {
> +		if (rtextbytes % get_conf_val(OPT_B, B_SIZE)) {
>  			fprintf(stderr,
> -		_("illegal rt extent size %lld, not a multiple of %d\n"),
> -				(long long)rtextbytes, blocksize);
> +		_("illegal rt extent size %lld, not a multiple of %lld\n"),
> +				(long long)rtextbytes, get_conf_val(OPT_B, B_SIZE));
>  			usage();
>  		}
> -		rtextblocks = (xfs_extlen_t)(rtextbytes >> blocklog);
> +		rtextblocks = (xfs_extlen_t)(rtextbytes >>
> +					     get_conf_val(OPT_B, B_LOG));
>  	} else {
>  		/*
>  		 * If realtime extsize has not been specified by the user,
> @@ -2608,18 +2595,21 @@ _("rmapbt not supported with realtime devices\n"));
>  		else
>  			rswidth = 0;
>  
> -		/* check that rswidth is a multiple of fs blocksize */
> -		if (!norsflag && rswidth && !(BBTOB(rswidth) % blocksize)) {
> +		/* check that rswidth is a multiple of fs B_SIZE */
> +		if (!norsflag && rswidth &&
> +		    !(BBTOB(rswidth) % get_conf_val(OPT_B, B_SIZE))) {
>  			rswidth = DTOBT(rswidth);
> -			rtextbytes = rswidth << blocklog;
> +			rtextbytes = rswidth << get_conf_val(OPT_B, B_LOG);
>  			if (XFS_MIN_RTEXTSIZE <= rtextbytes &&
>  			    (rtextbytes <= XFS_MAX_RTEXTSIZE)) {
>  				rtextblocks = rswidth;
>  			}
>  		}
>  		if (!rtextblocks) {
> -			rtextblocks = (blocksize < XFS_MIN_RTEXTSIZE) ?
> -					XFS_MIN_RTEXTSIZE >> blocklog : 1;
> +			rtextblocks = (get_conf_val(OPT_B, B_SIZE) <
> +				       XFS_MIN_RTEXTSIZE) ?
> +				       XFS_MIN_RTEXTSIZE >>
> +				       get_conf_val(OPT_B, B_LOG) : 1;
>  		}
>  	}
>  	ASSERT(rtextblocks);
> @@ -2627,22 +2617,25 @@ _("rmapbt not supported with realtime devices\n"));
>  	/*
>  	 * Check some argument sizes against mins, maxes.
>  	 */
> -	if (isize > blocksize / XFS_MIN_INODE_PERBLOCK ||
> +	if (isize > get_conf_val(OPT_B, B_SIZE) / XFS_MIN_INODE_PERBLOCK ||
>  	    isize < XFS_DINODE_MIN_SIZE ||
>  	    isize > XFS_DINODE_MAX_SIZE) {
>  		int	maxsz;
>  
>  		fprintf(stderr, _("illegal inode size %d\n"), isize);
> -		maxsz = MIN(blocksize / XFS_MIN_INODE_PERBLOCK,
> +		maxsz = MIN(get_conf_val(OPT_B, B_SIZE) /
> +			    XFS_MIN_INODE_PERBLOCK,
>  			    XFS_DINODE_MAX_SIZE);
>  		if (XFS_DINODE_MIN_SIZE == maxsz)
>  			fprintf(stderr,
> -			_("allowable inode size with %d byte blocks is %d\n"),
> -				blocksize, XFS_DINODE_MIN_SIZE);
> +			_("allowable inode size with %lld byte blocks is %d\n"),
> +				get_conf_val(OPT_B, B_SIZE),
> +				XFS_DINODE_MIN_SIZE);
>  		else
>  			fprintf(stderr,
> -	_("allowable inode size with %d byte blocks is between %d and %d\n"),
> -				blocksize, XFS_DINODE_MIN_SIZE, maxsz);
> +	_("allowable inode size with %lld byte blocks is between %d and %d\n"),
> +				get_conf_val(OPT_B, B_SIZE),
> +				XFS_DINODE_MIN_SIZE, maxsz);
>  		exit(1);
>  	}
>  
> @@ -2653,14 +2646,24 @@ _("rmapbt not supported with realtime devices\n"));
>  		sb_feat.log_version = 2;
>  	}
>  
> -	calc_stripe_factors(dsu, dsw, sectorsize, lsu, lsectorsize,
> +	int dsunit = get_conf_val(OPT_D, D_SUNIT);
> +	int dswidth = get_conf_val(OPT_D, D_SWIDTH);
> +
> +	calc_stripe_factors(get_conf_val(OPT_D, D_SU),
> +			    get_conf_val(OPT_D, D_SW),
> +			    get_conf_val(OPT_D, D_SECTSIZE),
> +			    lsu,
> +			    lsectorsize,
>  				&dsunit, &dswidth, &lsunit);
>  
>  	/* If sunit & swidth were manually specified as 0, same as noalign */
>  	if (dsflag && !dsunit && !dswidth)
> -		nodsflag = 1;
> +		set_conf_val(OPT_D, D_NOALIGN, 1);
> +
> +	set_conf_val(OPT_D, D_SUNIT, dsunit);
> +	set_conf_val(OPT_D, D_SWIDTH, dswidth);
>  
> -	xi.setblksize = sectorsize;
> +	xi.setblksize = get_conf_val(OPT_D, D_SECTSIZE);
>  
>  	/*
>  	 * Initialize.  This will open the log and rt devices as well.
> @@ -2683,7 +2686,8 @@ _("rmapbt not supported with realtime devices\n"));
>  	 * multiple of the sector size, or 1024, whichever is larger.
>  	 */
>  
> -	sector_mask = (uint64_t)-1 << (MAX(sectorlog, 10) - BBSHIFT);
> +	sector_mask = (uint64_t)-1 <<
> +		(MAX(get_conf_val(OPT_D, D_SECTLOG), 10) - BBSHIFT);
>  	xi.dsize &= sector_mask;
>  	xi.rtsize &= sector_mask;
>  	xi.logBBsize &= (uint64_t)-1 << (MAX(lsectorlog, 10) - BBSHIFT);
> @@ -2718,16 +2722,17 @@ _("rmapbt not supported with realtime devices\n"));
>  		rtfile = _("volume rt");
>  	else if (!xi.rtdev)
>  		rtfile = _("none");
> -	if (dbytes && xi.dsize > 0 && dblocks > DTOBT(xi.dsize)) {
> +	if (get_conf_val(OPT_D, D_SIZE) &&
> +	    xi.dsize > 0 && dblocks > DTOBT(xi.dsize)) {
>  		fprintf(stderr,
>  			_("size %s specified for data subvolume is too large, "
>  			"maximum is %lld blocks\n"),
>  			get_conf_raw_safe(OPT_D, D_SIZE),
>  			(long long)DTOBT(xi.dsize));
>  		usage();
> -	} else if (!dbytes && xi.dsize > 0)
> +	} else if (!get_conf_val(OPT_D, D_SIZE) && xi.dsize > 0)
>  		dblocks = DTOBT(xi.dsize);
> -	else if (!dbytes) {
> +	else if (!get_conf_val(OPT_D, D_SIZE)) {
>  		fprintf(stderr, _("can't get size of data subvolume\n"));
>  		usage();
>  	}
> @@ -2742,17 +2747,18 @@ _("rmapbt not supported with realtime devices\n"));
>  		fprintf(stderr,
>  			_("can't have both external and internal logs\n"));
>  		usage();
> -	} else if (loginternal && sectorsize != lsectorsize) {
> +	} else if (loginternal &&
> +		   get_conf_val(OPT_D, D_SECTSIZE) != lsectorsize) {
>  		fprintf(stderr,
>  	_("data and log sector sizes must be equal for internal logs\n"));
>  		usage();
>  	}
>  
> -	if (xi.dbsize > sectorsize) {
> +	if (xi.dbsize > get_conf_val(OPT_D, D_SECTSIZE)) {
>  		fprintf(stderr, _(
> -"Warning: the data subvolume sector size %u is less than the sector size \n\
> +"Warning: the data subvolume sector size %lld is less than the sector size \n\
>  reported by the device (%u).\n"),
> -			sectorsize, xi.dbsize);
> +			get_conf_val(OPT_D, D_SECTSIZE), xi.dbsize);
>  	}
>  	if (!loginternal && xi.lbsize > lsectorsize) {
>  		fprintf(stderr, _(
> @@ -2760,11 +2766,12 @@ reported by the device (%u).\n"),
>  reported by the device (%u).\n"),
>  			lsectorsize, xi.lbsize);
>  	}
> -	if (rtbytes && xi.rtsize > 0 && xi.rtbsize > sectorsize) {
> +	if (rtbytes && xi.rtsize > 0 &&
> +	    xi.rtbsize > get_conf_val(OPT_D, D_SECTSIZE)) {
>  		fprintf(stderr, _(
> -"Warning: the realtime subvolume sector size %u is less than the sector size\n\
> +"Warning: the realtime subvolume sector size %lld is less than the sector size\n\
>  reported by the device (%u).\n"),
> -			sectorsize, xi.rtbsize);
> +			get_conf_val(OPT_D, D_SECTSIZE), xi.rtbsize);
>  	}
>  
>  	if (rtbytes && xi.rtsize > 0 && rtblocks > DTOBT(xi.rtsize)) {
> @@ -2783,119 +2790,175 @@ reported by the device (%u).\n"),
>  	}
>  	if (xi.rtdev) {
>  		rtextents = rtblocks / rtextblocks;
> -		nbmblocks = (xfs_extlen_t)howmany(rtextents, NBBY * blocksize);
> +		nbmblocks = (xfs_extlen_t)howmany(rtextents, NBBY *
> +						  get_conf_val(OPT_B, B_SIZE));
>  	} else {
>  		rtextents = rtblocks = 0;
>  		nbmblocks = 0;
>  	}
>  
> -	if (!nodsflag) {
> -		if (dsunit) {
> -			if (ft.dsunit && ft.dsunit != dsunit) {
> +	if (!get_conf_val(OPT_D, D_NOALIGN)) {
> +		if (get_conf_val(OPT_D, D_SUNIT)) {
> +			if (ft.dsunit &&
> +			    ft.dsunit != get_conf_val(OPT_D, D_SUNIT)) {
>  				fprintf(stderr,
> -					_("%s: Specified data stripe unit %d "
> +					_("%s: Specified data stripe unit %lld "
>  					"is not the same as the volume stripe "
>  					"unit %d\n"),
> -					progname, dsunit, ft.dsunit);
> +					progname,
> +					get_conf_val(OPT_D, D_SUNIT),
> +					ft.dsunit);
>  			}
> -			if (ft.dswidth && ft.dswidth != dswidth) {
> +			if (ft.dswidth &&
> +			    ft.dswidth != get_conf_val(OPT_D, D_SWIDTH)) {
>  				fprintf(stderr,
> -					_("%s: Specified data stripe width %d "
> +					_("%s: Specified data stripe width %lld "
>  					"is not the same as the volume stripe "
>  					"width %d\n"),
> -					progname, dswidth, ft.dswidth);
> +					progname,
> +					get_conf_val(OPT_D, D_SWIDTH),
> +					ft.dswidth);
>  			}
>  		} else {
> -			dsunit = ft.dsunit;
> -			dswidth = ft.dswidth;
> -			nodsflag = 1;
> +			set_conf_val(OPT_D, D_SUNIT, ft.dsunit);
> +			set_conf_val(OPT_D, D_SWIDTH, ft.dswidth);
> +			set_conf_val(OPT_D, D_NOALIGN, 1);
>  		}
> -	} /* else dsunit & dswidth can't be set if nodsflag is set */
> +	} /* else D_SUNIT & D_SWIDTH can't be set if D_NOALIGN is set */
>  
>  	if (dasize) {		/* User-specified AG size */
>  		/*
> -		 * Check specified agsize is a multiple of blocksize.
> +		 * Check specified D_AGSIZE is a multiple of B_SIZE.
>  		 */
> -		if (agsize % blocksize) {
> +		if (get_conf_val(OPT_D, D_AGSIZE) %
> +		    get_conf_val(OPT_B, B_SIZE)) {
>  			fprintf(stderr,
> -		_("agsize (%lld) not a multiple of fs blk size (%d)\n"),
> -				(long long)agsize, blocksize);
> +		_("agsize (%lld) not a multiple of fs blk size (%lld)\n"),
> +				get_conf_val(OPT_D, D_AGSIZE),
> +				get_conf_val(OPT_B, B_SIZE));
>  			usage();
>  		}
> -		agsize /= blocksize;
> -		agcount = dblocks / agsize + (dblocks % agsize != 0);
> +		set_conf_val(OPT_D, D_AGSIZE,
> +			     get_conf_val(OPT_D, D_AGSIZE) /
> +			     get_conf_val(OPT_B, B_SIZE));
> +		set_conf_val(OPT_D, D_AGCOUNT,
> +			     dblocks / get_conf_val(OPT_D, D_AGSIZE) +
> +			     (dblocks % get_conf_val(OPT_D, D_AGSIZE) != 0));
>  
>  	} else if (daflag) {	/* User-specified AG count */
> -		agsize = dblocks / agcount + (dblocks % agcount != 0);
> +		set_conf_val(OPT_D, D_AGSIZE,
> +			     dblocks / get_conf_val(OPT_D, D_AGCOUNT) +
> +			     (dblocks % get_conf_val(OPT_D, D_AGCOUNT) != 0));
>  	} else {
> -		calc_default_ag_geometry(blocklog, dblocks,
> -				dsunit | dswidth, &agsize, &agcount);
> +		/* TODO change the calc_... function so it accepts opts
> +		 * directly, without the need to pass all the values. */
> +		uint64_t agcount = get_conf_val(OPT_D, D_AGCOUNT);
> +		uint64_t agsize = get_conf_val(OPT_D, D_AGSIZE);
> +
> +		calc_default_ag_geometry(get_conf_val(OPT_B, B_LOG),
> +					 dblocks, get_conf_val(OPT_D, D_SUNIT)
> +					 | get_conf_val(OPT_D, D_SWIDTH),
> +					 &agsize, &agcount);
> +		set_conf_val(OPT_D, D_AGCOUNT, agcount);
> +		set_conf_val(OPT_D, D_AGSIZE, agsize);
>  	}
>  
>  	/*
> -	 * If dsunit is a multiple of fs blocksize, then check that is a
> -	 * multiple of the agsize too
> +	 * If D_SUNIT is a multiple of fs B_SIZE,
> +	 * then check that is a multiple of the D_AGSIZE too
>  	 */
> -	if (dsunit && !(BBTOB(dsunit) % blocksize) &&
> -	    dswidth && !(BBTOB(dswidth) % blocksize)) {
> -
> -		/* convert from 512 byte blocks to fs blocksize */
> -		dsunit = DTOBT(dsunit);
> -		dswidth = DTOBT(dswidth);
> +	if (get_conf_val(OPT_D, D_SUNIT) &&
> +	    !(BBTOB(get_conf_val(OPT_D, D_SUNIT)) %
> +	      get_conf_val(OPT_B, B_SIZE)) &&
> +	    get_conf_val(OPT_D, D_SWIDTH) &&
> +	    !(BBTOB(get_conf_val(OPT_D, D_SWIDTH)) %
> +	      get_conf_val(OPT_B, B_SIZE))) {
> +
> +		/* convert from 512 byte blocks to fs B_SIZE
> +		 */
> +		set_conf_val(OPT_D, D_SUNIT,
> +			     DTOBT(get_conf_val(OPT_D, D_SUNIT)));
> +		set_conf_val(OPT_D, D_SWIDTH,
> +			     DTOBT(get_conf_val(OPT_D, D_SWIDTH)));
>  
>  		/*
> -		 * agsize is not a multiple of dsunit
> +		 * D_AGSIZE is not a multiple of D_SUNIT
>  		 */
> -		if ((agsize % dsunit) != 0) {
> +		if ((get_conf_val(OPT_D, D_AGSIZE) %
> +		     get_conf_val(OPT_D, D_SUNIT)) != 0) {
>  			/*
>  			 * Round up to stripe unit boundary. Also make sure
> -			 * that agsize is still larger than
> -			 * XFS_AG_MIN_BLOCKS(blocklog)
> +			 * that D_AGSIZE is still larger than
> +			 * XFS_AG_MIN_BLOCKS(get_conf_val(OPT_B, B_LOG))
>  		 	 */
> -			tmp_agsize = ((agsize + (dsunit - 1))/ dsunit) * dsunit;
> +			tmp_agsize = ((get_conf_val(OPT_D, D_AGSIZE) +
> +				       (get_conf_val(OPT_D, D_SUNIT) - 1)) /
> +				      get_conf_val(OPT_D, D_SUNIT)) *
> +				get_conf_val(OPT_D, D_SUNIT);
>  			/*
>  			 * Round down to stripe unit boundary if rounding up
>  			 * created an AG size that is larger than the AG max.
>  			 */
> -			if (tmp_agsize > XFS_AG_MAX_BLOCKS(blocklog))
> -				tmp_agsize = ((agsize) / dsunit) * dsunit;
> -
> -			if ((tmp_agsize >= XFS_AG_MIN_BLOCKS(blocklog)) &&
> -			    (tmp_agsize <= XFS_AG_MAX_BLOCKS(blocklog))) {
> -				agsize = tmp_agsize;
> +			if (tmp_agsize >
> +			    XFS_AG_MAX_BLOCKS(get_conf_val(OPT_B, B_LOG)))
> +				tmp_agsize = ((get_conf_val(OPT_D, D_AGSIZE)) /
> +					      get_conf_val(OPT_D, D_SUNIT)) *
> +					get_conf_val(OPT_D, D_SUNIT);
> +
> +			if ((tmp_agsize >=
> +			     XFS_AG_MIN_BLOCKS(get_conf_val(OPT_B, B_LOG))) &&
> +			    (tmp_agsize <=
> +			     XFS_AG_MAX_BLOCKS(get_conf_val(OPT_B, B_LOG)))) {
> +				set_conf_val(OPT_D, D_AGSIZE, tmp_agsize);
>  				if (!daflag)
> -					agcount = dblocks/agsize +
> -						(dblocks % agsize != 0);
> +					set_conf_val(OPT_D, D_AGCOUNT,
> +						dblocks /
> +						get_conf_val(OPT_D, D_AGSIZE) +
> +						(dblocks %
> +						 get_conf_val(OPT_D, D_AGSIZE)
> +						!= 0));
>  				if (dasize)
>  					fprintf(stderr,
> -				_("agsize rounded to %lld, swidth = %d\n"),
> -						(long long)agsize, dswidth);
> +				_("agsize rounded to %lld, swidth = %lld\n"),
> +						get_conf_val(OPT_D, D_AGSIZE),
> +						get_conf_val(OPT_D, D_SWIDTH));
>  			} else {
> -				if (nodsflag) {
> -					dsunit = dswidth = 0;
> +				if (get_conf_val(OPT_D, D_NOALIGN)) {
> +					set_conf_val(OPT_D, D_SUNIT, 0);
> +					set_conf_val(OPT_D, D_SWIDTH, 0);
>  				} else {
>  					/*
> -					 * agsize is out of bounds, this will
> +					 * D_AGSIZE is out of bounds, this will
>  					 * print nice details & exit.
>  					 */
> -					validate_ag_geometry(blocklog, dblocks,
> -							    agsize, agcount);
> +					validate_ag_geometry(
> +						get_conf_val(OPT_B, B_LOG),
> +						dblocks,
> +						get_conf_val(OPT_D, D_AGSIZE),
> +						get_conf_val(OPT_D, D_AGCOUNT));
>  					exit(1);
>  				}
>  			}
>  		}
> -		if (dswidth && ((agsize % dswidth) == 0) && (agcount > 1)) {
> +		if (get_conf_val(OPT_D, D_SWIDTH) &&
> +		    ((get_conf_val(OPT_D, D_AGSIZE) %
> +		      get_conf_val(OPT_D, D_SWIDTH)) == 0) &&
> +		    (get_conf_val(OPT_D, D_AGCOUNT) > 1)) {
>  			/* This is a non-optimal configuration because all AGs
>  			 * start on the same disk in the stripe.  Changing
>  			 * the AG size by one sunit will guarantee that this
>  			 * does not happen.
>  			 */
> -			tmp_agsize = agsize - dsunit;
> -			if (tmp_agsize < XFS_AG_MIN_BLOCKS(blocklog)) {
> -				tmp_agsize = agsize + dsunit;
> -				if (dblocks < agsize) {
> +			tmp_agsize = get_conf_val(OPT_D, D_AGSIZE) -
> +				get_conf_val(OPT_D, D_SUNIT);
> +			if (tmp_agsize <
> +			    XFS_AG_MIN_BLOCKS(get_conf_val(OPT_B, B_LOG))) {
> +				tmp_agsize = get_conf_val(OPT_D, D_AGSIZE) +
> +					get_conf_val(OPT_D, D_SUNIT);
> +				if (dblocks < get_conf_val(OPT_D, D_AGSIZE)) {
>  					/* oh well, nothing to do */
> -					tmp_agsize = agsize;
> +					tmp_agsize =
> +						get_conf_val(OPT_D, D_AGSIZE);
>  				}
>  			}
>  			if (daflag || dasize) {
> @@ -2905,30 +2968,46 @@ problems by aligning all AGs on the same disk.  To avoid this, run mkfs with\n\
>  an AG size that is one stripe unit smaller, for example %llu.\n"),
>  					(unsigned long long)tmp_agsize);
>  			} else {
> -				agsize = tmp_agsize;
> -				agcount = dblocks/agsize + (dblocks % agsize != 0);
> +				set_conf_val(OPT_D, D_AGSIZE, tmp_agsize);
> +				set_conf_val(OPT_D, D_AGCOUNT,
> +					dblocks/get_conf_val(OPT_D, D_AGSIZE) +
> +					     (dblocks %
> +					      get_conf_val(OPT_D, D_AGSIZE)
> +					      != 0));
>  				/*
>  				 * If the last AG is too small, reduce the
>  				 * filesystem size and drop the blocks.
>  				 */
> -				if ( dblocks % agsize != 0 &&
> -				    (dblocks % agsize <
> -				    XFS_AG_MIN_BLOCKS(blocklog))) {
> -					dblocks = (xfs_rfsblock_t)((agcount - 1) * agsize);
> -					agcount--;
> -					ASSERT(agcount != 0);
> +				if (dblocks % get_conf_val(OPT_D, D_AGSIZE)
> +				    != 0 &&
> +				    (dblocks % get_conf_val(OPT_D, D_AGSIZE) <
> +				    XFS_AG_MIN_BLOCKS(
> +					get_conf_val(OPT_B, B_LOG)))) {
> +
> +					dblocks = (xfs_rfsblock_t)(
> +						(get_conf_val(OPT_D, D_AGCOUNT)
> +						 - 1) *
> +						get_conf_val(OPT_D, D_AGSIZE));
> +					set_conf_val(OPT_D, D_AGCOUNT,
> +						get_conf_val(OPT_D, D_AGCOUNT)
> +						- 1);
> +					ASSERT(get_conf_val(OPT_D, D_AGCOUNT)
> +					       != 0);
>  				}
>  			}
>  		}
>  	} else {
> -		if (nodsflag)
> -			dsunit = dswidth = 0;
> -		else {
> +		if (get_conf_val(OPT_D, D_NOALIGN)) {
> +			set_conf_val(OPT_D, D_SWIDTH, 0);
> +			set_conf_val(OPT_D, D_SUNIT, 0);
> +		} else {
>  			fprintf(stderr,
> -				_("%s: Stripe unit(%d) or stripe width(%d) is "
> -				"not a multiple of the block size(%d)\n"),
> -				progname, BBTOB(dsunit), BBTOB(dswidth),
> -				blocksize);
> +				_("%s: Stripe unit(%lld) or stripe width(%lld) is "
> +				"not a multiple of the block size(%lld)\n"),
> +				progname,
> +				BBTOB(get_conf_val(OPT_D, D_SUNIT)),
> +				BBTOB(get_conf_val(OPT_D, D_SWIDTH)),
> +				get_conf_val(OPT_B, B_SIZE));
>  			exit(1);
>  		}
>  	}
> @@ -2937,53 +3016,69 @@ an AG size that is one stripe unit smaller, for example %llu.\n"),
>  	 * If the last AG is too small, reduce the filesystem size
>  	 * and drop the blocks.
>  	 */
> -	if ( dblocks % agsize != 0 &&
> -	     (dblocks % agsize < XFS_AG_MIN_BLOCKS(blocklog))) {
> +	if (dblocks % get_conf_val(OPT_D, D_AGSIZE) != 0 &&
> +	     (dblocks % get_conf_val(OPT_D, D_AGSIZE) <
> +	      XFS_AG_MIN_BLOCKS(get_conf_val(OPT_B, B_LOG)))) {
>  		ASSERT(!daflag);
> -		dblocks = (xfs_rfsblock_t)((agcount - 1) * agsize);
> -		agcount--;
> -		ASSERT(agcount != 0);
> +		dblocks = (xfs_rfsblock_t)(
> +				(get_conf_val(OPT_D, D_AGCOUNT) - 1) *
> +				get_conf_val(OPT_D, D_AGSIZE));
> +		set_conf_val(OPT_D, D_AGCOUNT,
> +			     get_conf_val(OPT_D, D_AGCOUNT) - 1);
> +		ASSERT(get_conf_val(OPT_D, D_AGCOUNT) != 0);
>  	}
>  
> -	validate_ag_geometry(blocklog, dblocks, agsize, agcount);
> +	validate_ag_geometry(get_conf_val(OPT_B, B_LOG),
> +			     dblocks,
> +			     get_conf_val(OPT_D, D_AGSIZE),
> +			     get_conf_val(OPT_D, D_AGCOUNT));
>  
>  	if (!imflag)
> -		imaxpct = calc_default_imaxpct(blocklog, dblocks);
> +		imaxpct = calc_default_imaxpct(get_conf_val(OPT_B, B_LOG),
> +					       dblocks);
>  
>  	/*
> -	 * check that log sunit is modulo fsblksize or default it to dsunit.
> +	 * check that log sunit is modulo fsblksize or default it to D_SUNIT.
>  	 */
>  
>  	if (lsunit) {
>  		/* convert from 512 byte blocks to fs blocks */
>  		lsunit = DTOBT(lsunit);
> -	} else if (sb_feat.log_version == 2 && loginternal && dsunit) {
> -		/* lsunit and dsunit now in fs blocks */
> -		lsunit = dsunit;
> +	} else if (sb_feat.log_version == 2 &&
> +		   loginternal &&
> +		   get_conf_val(OPT_D, D_SUNIT)) {
> +		/* lsunit and get_conf_val(OPT_D, D_SUNIT) now in fs blocks */
> +		lsunit = get_conf_val(OPT_D, D_SUNIT);
>  	}
>  
> -	if (sb_feat.log_version == 2 && (lsunit * blocksize) > 256 * 1024) {
> +	if (sb_feat.log_version == 2 &&
> +	    (lsunit * get_conf_val(OPT_B, B_SIZE)) > 256 * 1024) {
>  		/* Warn only if specified on commandline */
>  		if (lsuflag || lsunitflag) {
>  			fprintf(stderr,
> -	_("log stripe unit (%d bytes) is too large (maximum is 256KiB)\n"),
> -				(lsunit * blocksize));
> +	_("log stripe unit (%lld bytes) is too large (maximum is 256KiB)\n"),
> +				(lsunit * get_conf_val(OPT_B, B_SIZE)));
>  			fprintf(stderr,
>  	_("log stripe unit adjusted to 32KiB\n"));
>  		}
> -		lsunit = (32 * 1024) >> blocklog;
> +		lsunit = (32 * 1024) >> get_conf_val(OPT_B, B_LOG);
>  	}
>  
> -	min_logblocks = max_trans_res(agsize,
> +	min_logblocks = max_trans_res(get_conf_val(OPT_D, D_AGSIZE),
>  				   sb_feat.crcs_enabled, sb_feat.dir_version,
> -				   sectorlog, blocklog, inodelog, dirblocklog,
> +				   get_conf_val(OPT_D, D_SECTLOG),
> +				   get_conf_val(OPT_B, B_LOG),
> +				   inodelog, dirblocklog,
>  				   sb_feat.log_version, lsunit, sb_feat.finobt,
>  				   sb_feat.rmapbt, sb_feat.reflink,
>  				   sb_feat.inode_align);
>  	ASSERT(min_logblocks);
>  	min_logblocks = MAX(XFS_MIN_LOG_BLOCKS, min_logblocks);
> -	if (!logbytes && dblocks >= (1024*1024*1024) >> blocklog)
> -		min_logblocks = MAX(min_logblocks, XFS_MIN_LOG_BYTES>>blocklog);
> +	if (!logbytes &&
> +	    dblocks >= (1024*1024*1024) >> get_conf_val(OPT_B, B_LOG))
> +		min_logblocks = MAX(min_logblocks,
> +				    XFS_MIN_LOG_BYTES >>
> +				    get_conf_val(OPT_B, B_LOG));
>  	if (logbytes && xi.logBBsize > 0 && logblocks > DTOBT(xi.logBBsize)) {
>  		fprintf(stderr,
>  _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
> @@ -3004,17 +3099,19 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  		logblocks = 0;
>  	} else if (loginternal && !logbytes) {
>  
> -		if (dblocks < GIGABYTES(1, blocklog)) {
> +		if (dblocks < GIGABYTES(1, get_conf_val(OPT_B, B_LOG))) {
>  			/* tiny filesystems get minimum sized logs. */
>  			logblocks = min_logblocks;
> -		} else if (dblocks < GIGABYTES(16, blocklog)) {
> +		} else if (dblocks <
> +			   GIGABYTES(16, get_conf_val(OPT_B, B_LOG))) {
>  
>  			/*
>  			 * For small filesystems, we want to use the
>  			 * XFS_MIN_LOG_BYTES for filesystems smaller than 16G if
>  			 * at all possible, ramping up to 128MB at 256GB.
>  			 */
> -			logblocks = MIN(XFS_MIN_LOG_BYTES >> blocklog,
> +			logblocks = MIN(XFS_MIN_LOG_BYTES >>
> +					get_conf_val(OPT_B, B_LOG),
>  					min_logblocks * XFS_DFL_LOG_FACTOR);
>  		} else {
>  			/*
> @@ -3023,34 +3120,38 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  			 * max log size of 128M at 256GB fs size. IOWs,
>  			 * the ratio of fs size to log size is 2048:1.
>  			 */
> -			logblocks = (dblocks << blocklog) / 2048;
> -			logblocks = logblocks >> blocklog;
> +			logblocks = (dblocks <<
> +				     get_conf_val(OPT_B, B_LOG)) / 2048;
> +			logblocks = logblocks >> get_conf_val(OPT_B, B_LOG);
>  		}
>  
>  		/* Ensure the chosen size meets minimum log size requirements */
>  		logblocks = MAX(min_logblocks, logblocks);
>  
>  		/* make sure the log fits wholly within an AG */
> -		if (logblocks >= agsize)
> +		if (logblocks >= get_conf_val(OPT_D, D_AGSIZE))
>  			logblocks = min_logblocks;
>  
>  		/* and now clamp the size to the maximum supported size */
>  		logblocks = MIN(logblocks, XFS_MAX_LOG_BLOCKS);
> -		if ((logblocks << blocklog) > XFS_MAX_LOG_BYTES)
> -			logblocks = XFS_MAX_LOG_BYTES >> blocklog;
> +		if ((logblocks << get_conf_val(OPT_B, B_LOG)) >
> +		    XFS_MAX_LOG_BYTES)
> +			logblocks = XFS_MAX_LOG_BYTES >>
> +				get_conf_val(OPT_B, B_LOG);
>  
>  	}
> -	validate_log_size(logblocks, blocklog, min_logblocks);
> +	validate_log_size(logblocks, get_conf_val(OPT_B, B_LOG), min_logblocks);
>  
>  	protostring = setup_proto(protofile);
> -	bsize = 1 << (blocklog - BBSHIFT);
> +	bsize = 1 << (get_conf_val(OPT_B, B_LOG) - BBSHIFT);
>  	mp = &mbuf;
>  	sbp = &mp->m_sb;
>  	memset(mp, 0, sizeof(xfs_mount_t));
> -	sbp->sb_blocklog = (uint8_t)blocklog;
> -	sbp->sb_sectlog = (uint8_t)sectorlog;
> -	sbp->sb_agblklog = (uint8_t)libxfs_log2_roundup((unsigned int)agsize);
> -	sbp->sb_agblocks = (xfs_agblock_t)agsize;
> +	sbp->sb_blocklog = (uint8_t)get_conf_val(OPT_B, B_LOG);
> +	sbp->sb_sectlog = (uint8_t)get_conf_val(OPT_D, D_SECTLOG);
> +	sbp->sb_agblklog = (uint8_t)libxfs_log2_roundup(
> +				(unsigned int)get_conf_val(OPT_D, D_AGSIZE));
> +	sbp->sb_agblocks = (xfs_agblock_t)get_conf_val(OPT_D, D_AGSIZE);
>  	mp->m_blkbb_log = sbp->sb_blocklog - BBSHIFT;
>  	mp->m_sectbb_log = sbp->sb_sectlog - BBSHIFT;
>  
> @@ -3058,7 +3159,10 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  	 * sb_versionnum, finobt and rmapbt flags must be set before we use
>  	 * libxfs_prealloc_blocks().
>  	 */
> -	sb_set_features(&mp->m_sb, &sb_feat, sectorsize, lsectorsize, dsunit);
> +	sb_set_features(&mp->m_sb, &sb_feat,
> +			get_conf_val(OPT_D, D_SECTSIZE),
> +			lsectorsize,
> +			get_conf_val(OPT_D, D_SUNIT));
>  
>  
>  	if (loginternal) {
> @@ -3071,9 +3175,12 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  					libxfs_alloc_ag_max_usable(mp));
>  
>  			/* revalidate the log size is valid if we changed it */
> -			validate_log_size(logblocks, blocklog, min_logblocks);
> +			validate_log_size(logblocks,
> +					  get_conf_val(OPT_B, B_LOG),
> +					  min_logblocks);
>  		}
> -		if (logblocks > agsize - libxfs_prealloc_blocks(mp)) {
> +		if (logblocks > get_conf_val(OPT_D, D_AGSIZE) -
> +		    libxfs_prealloc_blocks(mp)) {
>  			fprintf(stderr,
>  	_("internal log size %lld too large, must fit in allocation group\n"),
>  				(long long)logblocks);
> @@ -3081,14 +3188,16 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  		}
>  
>  		if (laflag) {
> -			if (logagno >= agcount) {
> +			if (logagno >= get_conf_val(OPT_D, D_AGCOUNT)) {
>  				fprintf(stderr,
>  		_("log ag number %d too large, must be less than %lld\n"),
> -					logagno, (long long)agcount);
> +					logagno,
> +					get_conf_val(OPT_D, D_AGCOUNT));
>  				usage();
>  			}
>  		} else
> -			logagno = (xfs_agnumber_t)(agcount / 2);
> +			logagno = (xfs_agnumber_t)(
> +					get_conf_val(OPT_D, D_AGCOUNT) / 2);
>  
>  		logstart = XFS_AGB_TO_FSB(mp, logagno, libxfs_prealloc_blocks(mp));
>  		/*
> @@ -3096,45 +3205,53 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  		 */
>  		if (lsunit) {
>  			logstart = fixup_internal_log_stripe(mp,
> -					lsflag, logstart, agsize, lsunit,
> -					&logblocks, blocklog, &lalign);
> -		} else if (dsunit) {
> +					lsflag, logstart,
> +					get_conf_val(OPT_D, D_AGSIZE), lsunit,
> +					&logblocks,
> +					get_conf_val(OPT_B, B_LOG), &lalign);
> +		} else if (get_conf_val(OPT_D, D_SUNIT)) {
>  			logstart = fixup_internal_log_stripe(mp,
> -					lsflag, logstart, agsize, dsunit,
> -					&logblocks, blocklog, &lalign);
> +					lsflag, logstart,
> +					get_conf_val(OPT_D, D_AGSIZE),
> +					get_conf_val(OPT_D, D_SUNIT),
> +					&logblocks,
> +					get_conf_val(OPT_B, B_LOG), &lalign);
>  		}
>  	} else {
>  		logstart = 0;
>  		if (lsunit)
>  			fixup_log_stripe_unit(lsflag, lsunit,
> -					&logblocks, blocklog);
> +					&logblocks, get_conf_val(OPT_B, B_LOG));
>  	}
> -	validate_log_size(logblocks, blocklog, min_logblocks);
> +	validate_log_size(logblocks, get_conf_val(OPT_B, B_LOG), min_logblocks);
>  
>  	if (!qflag || Nflag) {
>  		printf(_(
>  		   "meta-data=%-22s isize=%-6d agcount=%lld, agsize=%lld blks\n"
> -		   "         =%-22s sectsz=%-5u attr=%u, projid32bit=%u\n"
> +		   "         =%-22s sectsz=%-5lld attr=%u, projid32bit=%u\n"
>  		   "         =%-22s crc=%-8u finobt=%u, sparse=%u, rmapbt=%u, reflink=%u\n"
> -		   "data     =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n"
> -		   "         =%-22s sunit=%-6u swidth=%u blks\n"
> +		   "data     =%-22s bsize=%-6lld blocks=%llu, imaxpct=%u\n"
> +		   "         =%-22s sunit=%-6lld swidth=%lld blks\n"
>  		   "naming   =version %-14u bsize=%-6u ascii-ci=%d ftype=%d\n"
>  		   "log      =%-22s bsize=%-6d blocks=%lld, version=%d\n"
>  		   "         =%-22s sectsz=%-5u sunit=%d blks, lazy-count=%d\n"
>  		   "realtime =%-22s extsz=%-6d blocks=%lld, rtextents=%lld\n"),
> -			dfile, isize, (long long)agcount, (long long)agsize,
> -			"", sectorsize, sb_feat.attr_version,
> +			dfile, isize, get_conf_val(OPT_D, D_AGCOUNT),
> +			get_conf_val(OPT_D, D_AGSIZE),
> +			"", get_conf_val(OPT_D, D_SECTSIZE),
> +			sb_feat.attr_version,
>  				    !sb_feat.projid16bit,
>  			"", sb_feat.crcs_enabled, sb_feat.finobt, sb_feat.spinodes,
>  			sb_feat.rmapbt, sb_feat.reflink,
> -			"", blocksize, (long long)dblocks, imaxpct,
> -			"", dsunit, dswidth,
> +			"", get_conf_val(OPT_B, B_SIZE), (long long)dblocks, imaxpct,
> +			"", get_conf_val(OPT_D, D_SUNIT),
> +			get_conf_val(OPT_D, D_SWIDTH),
>  			sb_feat.dir_version, dirblocksize, sb_feat.nci,
>  				sb_feat.dirftype,
> -			logfile, 1 << blocklog, (long long)logblocks,
> +			logfile, 1 << get_conf_val(OPT_B, B_LOG), (long long)logblocks,
>  			sb_feat.log_version, "", lsectorsize, lsunit,
>  				sb_feat.lazy_sb_counters,
> -			rtfile, rtextblocks << blocklog,
> +			rtfile, rtextblocks << get_conf_val(OPT_B, B_LOG),
>  			(long long)rtblocks, (long long)rtextents);
>  		if (Nflag)
>  			exit(0);
> @@ -3143,7 +3260,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  	if (label)
>  		strncpy(sbp->sb_fname, label, sizeof(sbp->sb_fname));
>  	sbp->sb_magicnum = XFS_SB_MAGIC;
> -	sbp->sb_blocksize = blocksize;
> +	sbp->sb_blocksize = get_conf_val(OPT_B, B_SIZE);
>  	sbp->sb_dblocks = dblocks;
>  	sbp->sb_rblocks = rtblocks;
>  	sbp->sb_rextents = rtextents;
> @@ -3153,15 +3270,15 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  	sbp->sb_logstart = logstart;
>  	sbp->sb_rootino = sbp->sb_rbmino = sbp->sb_rsumino = NULLFSINO;
>  	sbp->sb_rextsize = rtextblocks;
> -	sbp->sb_agcount = (xfs_agnumber_t)agcount;
> +	sbp->sb_agcount = (xfs_agnumber_t)get_conf_val(OPT_D, D_AGCOUNT);
>  	sbp->sb_rbmblocks = nbmblocks;
>  	sbp->sb_logblocks = (xfs_extlen_t)logblocks;
> -	sbp->sb_sectsize = (uint16_t)sectorsize;
> +	sbp->sb_sectsize = (uint16_t)get_conf_val(OPT_D, D_SECTSIZE);
>  	sbp->sb_inodesize = (uint16_t)isize;
> -	sbp->sb_inopblock = (uint16_t)(blocksize / isize);
> -	sbp->sb_sectlog = (uint8_t)sectorlog;
> +	sbp->sb_inopblock = (uint16_t)(get_conf_val(OPT_B, B_SIZE) / isize);
> +	sbp->sb_sectlog = (uint8_t)get_conf_val(OPT_D, D_SECTLOG);
>  	sbp->sb_inodelog = (uint8_t)inodelog;
> -	sbp->sb_inopblog = (uint8_t)(blocklog - inodelog);
> +	sbp->sb_inopblog = (uint8_t)(get_conf_val(OPT_B, B_LOG) - inodelog);
>  	sbp->sb_rextslog =
>  		(uint8_t)(rtextents ?
>  			libxfs_highbit32((unsigned int)rtextents) : 0);
> @@ -3169,14 +3286,15 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  	sbp->sb_imax_pct = imaxpct;
>  	sbp->sb_icount = 0;
>  	sbp->sb_ifree = 0;
> -	sbp->sb_fdblocks = dblocks - agcount * libxfs_prealloc_blocks(mp) -
> +	sbp->sb_fdblocks = dblocks -
> +		get_conf_val(OPT_D, D_AGCOUNT) * libxfs_prealloc_blocks(mp) -
>  		(loginternal ? logblocks : 0);
>  	sbp->sb_frextents = 0;	/* will do a free later */
>  	sbp->sb_uquotino = sbp->sb_gquotino = sbp->sb_pquotino = 0;
>  	sbp->sb_qflags = 0;
> -	sbp->sb_unit = dsunit;
> -	sbp->sb_width = dswidth;
> -	sbp->sb_dirblklog = dirblocklog - blocklog;
> +	sbp->sb_unit = get_conf_val(OPT_D, D_SUNIT);
> +	sbp->sb_width = get_conf_val(OPT_D, D_SWIDTH);
> +	sbp->sb_dirblklog = dirblocklog - get_conf_val(OPT_B, B_LOG);
>  	if (sb_feat.log_version == 2) {	/* This is stored in bytes */
>  		lsunit = (lsunit == 0) ? 1 : XFS_FSB_TO_B(mp, lsunit);
>  		sbp->sb_logsunit = lsunit;
> @@ -3186,11 +3304,12 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  		int	cluster_size = XFS_INODE_BIG_CLUSTER_SIZE;
>  		if (sb_feat.crcs_enabled)
>  			cluster_size *= isize / XFS_DINODE_MIN_SIZE;
> -		sbp->sb_inoalignmt = cluster_size >> blocklog;
> +		sbp->sb_inoalignmt = cluster_size >> get_conf_val(OPT_B, B_LOG);
>  		sb_feat.inode_align = sbp->sb_inoalignmt != 0;
>  	} else
>  		sbp->sb_inoalignmt = 0;
> -	if (lsectorsize != BBSIZE || sectorsize != BBSIZE) {
> +	if (lsectorsize != BBSIZE ||
> +	    get_conf_val(OPT_D, D_SECTSIZE) != BBSIZE) {
>  		sbp->sb_logsectlog = (uint8_t)lsectorlog;
>  		sbp->sb_logsectsize = (uint16_t)lsectorsize;
>  	} else {
> @@ -3198,7 +3317,10 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  		sbp->sb_logsectsize = 0;
>  	}
>  
> -	sb_set_features(&mp->m_sb, &sb_feat, sectorsize, lsectorsize, dsunit);
> +	sb_set_features(&mp->m_sb, &sb_feat,
> +			get_conf_val(OPT_D, D_SECTSIZE),
> +			lsectorsize,
> +			get_conf_val(OPT_D, D_SUNIT));
>  
>  	if (force_overwrite)
>  		zero_old_xfs_structures(&xi, sbp);
> @@ -3218,7 +3340,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  	/* OK, now write the superblock */
>  	buf = libxfs_getbuf(mp->m_ddev_targp, XFS_SB_DADDR, XFS_FSS_TO_BB(mp, 1));
>  	buf->b_ops = &xfs_sb_buf_ops;
> -	memset(XFS_BUF_PTR(buf), 0, sectorsize);
> +	memset(XFS_BUF_PTR(buf), 0, get_conf_val(OPT_D, D_SECTSIZE));
>  	libxfs_sb_to_disk((void *)XFS_BUF_PTR(buf), sbp);
>  	libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE);
>  	libxfs_purgebuf(buf);
> @@ -3228,8 +3350,10 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  	 * if needed so that the reads for the end of the device in the mount
>  	 * code will succeed.
>  	 */
> -	if (xi.disfile && xi.dsize * xi.dbsize < dblocks * blocksize) {
> -		if (ftruncate(xi.dfd, dblocks * blocksize) < 0) {
> +	if (xi.disfile &&
> +	    xi.dsize * xi.dbsize < dblocks * get_conf_val(OPT_B, B_SIZE)) {
> +		if (ftruncate(xi.dfd,
> +			     dblocks * get_conf_val(OPT_B, B_SIZE)) < 0) {
>  			fprintf(stderr,
>  				_("%s: Growing the data section failed\n"),
>  				progname);
> @@ -3271,7 +3395,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  	 * These initialisations should be pulled into libxfs to keep the
>  	 * kernel/userspace header initialisation code the same.
>  	 */
> -	for (agno = 0; agno < agcount; agno++) {
> +	for (agno = 0; agno < get_conf_val(OPT_D, D_AGCOUNT); agno++) {
>  		struct xfs_agfl	*agfl;
>  		int		bucket;
>  		struct xfs_perag *pag = libxfs_perag_get(mp, agno);
> @@ -3283,7 +3407,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  				XFS_AG_DADDR(mp, agno, XFS_SB_DADDR),
>  				XFS_FSS_TO_BB(mp, 1));
>  		buf->b_ops = &xfs_sb_buf_ops;
> -		memset(XFS_BUF_PTR(buf), 0, sectorsize);
> +		memset(XFS_BUF_PTR(buf), 0, get_conf_val(OPT_D, D_SECTSIZE));
>  		libxfs_sb_to_disk((void *)XFS_BUF_PTR(buf), sbp);
>  		libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE);
>  
> @@ -3295,13 +3419,17 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  				XFS_FSS_TO_BB(mp, 1));
>  		buf->b_ops = &xfs_agf_buf_ops;
>  		agf = XFS_BUF_TO_AGF(buf);
> -		memset(agf, 0, sectorsize);
> -		if (agno == agcount - 1)
> -			agsize = dblocks - (xfs_rfsblock_t)(agno * agsize);
> +		memset(agf, 0, get_conf_val(OPT_D, D_SECTSIZE));
> +		if (agno == get_conf_val(OPT_D, D_AGCOUNT) - 1)
> +			set_conf_val(OPT_D, D_AGSIZE,
> +				dblocks -
> +				(xfs_rfsblock_t)(agno *
> +					get_conf_val(OPT_D, D_AGSIZE)));
> +
>  		agf->agf_magicnum = cpu_to_be32(XFS_AGF_MAGIC);
>  		agf->agf_versionnum = cpu_to_be32(XFS_AGF_VERSION);
>  		agf->agf_seqno = cpu_to_be32(agno);
> -		agf->agf_length = cpu_to_be32(agsize);
> +		agf->agf_length = cpu_to_be32(get_conf_val(OPT_D, D_AGSIZE));
>  		agf->agf_roots[XFS_BTNUM_BNOi] = cpu_to_be32(XFS_BNO_BLOCK(mp));
>  		agf->agf_roots[XFS_BTNUM_CNTi] = cpu_to_be32(XFS_CNT_BLOCK(mp));
>  		agf->agf_levels[XFS_BTNUM_BNOi] = cpu_to_be32(1);
> @@ -3323,7 +3451,8 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  		agf->agf_flfirst = 0;
>  		agf->agf_fllast = cpu_to_be32(XFS_AGFL_SIZE(mp) - 1);
>  		agf->agf_flcount = 0;
> -		nbmblocks = (xfs_extlen_t)(agsize - libxfs_prealloc_blocks(mp));
> +		nbmblocks = (xfs_extlen_t)(get_conf_val(OPT_D, D_AGSIZE) -
> +					   libxfs_prealloc_blocks(mp));
>  		agf->agf_freeblks = cpu_to_be32(nbmblocks);
>  		agf->agf_longest = cpu_to_be32(nbmblocks);
>  		if (xfs_sb_version_hascrc(&mp->m_sb))
> @@ -3331,7 +3460,8 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  
>  		if (loginternal && agno == logagno) {
>  			be32_add_cpu(&agf->agf_freeblks, -logblocks);
> -			agf->agf_longest = cpu_to_be32(agsize -
> +			agf->agf_longest =
> +				cpu_to_be32(get_conf_val(OPT_D, D_AGSIZE) -
>  				XFS_FSB_TO_AGBNO(mp, logstart) - logblocks);
>  		}
>  		if (libxfs_alloc_min_freelist(mp, pag) > worst_freelist)
> @@ -3347,7 +3477,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  		buf->b_ops = &xfs_agfl_buf_ops;
>  		agfl = XFS_BUF_TO_AGFL(buf);
>  		/* setting to 0xff results in initialisation to NULLAGBLOCK */
> -		memset(agfl, 0xff, sectorsize);
> +		memset(agfl, 0xff, get_conf_val(OPT_D, D_SECTSIZE));
>  		if (xfs_sb_version_hascrc(&mp->m_sb)) {
>  			agfl->agfl_magicnum = cpu_to_be32(XFS_AGFL_MAGIC);
>  			agfl->agfl_seqno = cpu_to_be32(agno);
> @@ -3366,11 +3496,13 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  				XFS_FSS_TO_BB(mp, 1));
>  		agi = XFS_BUF_TO_AGI(buf);
>  		buf->b_ops = &xfs_agi_buf_ops;
> -		memset(agi, 0, sectorsize);
> +		memset(agi, 0, get_conf_val(OPT_D, D_SECTSIZE));
>  		agi->agi_magicnum = cpu_to_be32(XFS_AGI_MAGIC);
>  		agi->agi_versionnum = cpu_to_be32(XFS_AGI_VERSION);
>  		agi->agi_seqno = cpu_to_be32(agno);
> -		agi->agi_length = cpu_to_be32((xfs_agblock_t)agsize);
> +		agi->agi_length =
> +			cpu_to_be32(
> +				(xfs_agblock_t)get_conf_val(OPT_D, D_AGSIZE));
>  		agi->agi_count = 0;
>  		agi->agi_root = cpu_to_be32(XFS_IBT_BLOCK(mp));
>  		agi->agi_level = cpu_to_be32(1);
> @@ -3395,7 +3527,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  				bsize);
>  		buf->b_ops = &xfs_allocbt_buf_ops;
>  		block = XFS_BUF_TO_BLOCK(buf);
> -		memset(block, 0, blocksize);
> +		memset(block, 0, get_conf_val(OPT_B, B_SIZE));
>  		libxfs_btree_init_block(mp, buf, XFS_BTNUM_BNO, 0, 1, agno, 0);
>  
>  		arec = XFS_ALLOC_REC_ADDR(mp, block, 1);
> @@ -3430,7 +3562,8 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  		 * so, reset the record count to 0 to avoid exposure of an invalid
>  		 * record start block.
>  		 */
> -		arec->ar_blockcount = cpu_to_be32(agsize -
> +		arec->ar_blockcount =
> +			cpu_to_be32(get_conf_val(OPT_D, D_AGSIZE) -
>  					be32_to_cpu(arec->ar_startblock));
>  		if (!arec->ar_blockcount)
>  			block->bb_numrecs = 0;
> @@ -3445,7 +3578,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  				bsize);
>  		buf->b_ops = &xfs_allocbt_buf_ops;
>  		block = XFS_BUF_TO_BLOCK(buf);
> -		memset(block, 0, blocksize);
> +		memset(block, 0, get_conf_val(OPT_B, B_SIZE));
>  		libxfs_btree_init_block(mp, buf, XFS_BTNUM_CNT, 0, 1, agno, 0);
>  
>  		arec = XFS_ALLOC_REC_ADDR(mp, block, 1);
> @@ -3470,7 +3603,8 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  		 * so, reset the record count to 0 to avoid exposure of an invalid
>  		 * record start block.
>  		 */
> -		arec->ar_blockcount = cpu_to_be32(agsize -
> +		arec->ar_blockcount =
> +			cpu_to_be32(get_conf_val(OPT_D, D_AGSIZE) -
>  					be32_to_cpu(arec->ar_startblock));
>  		if (!arec->ar_blockcount)
>  			block->bb_numrecs = 0;
> @@ -3488,7 +3622,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  			buf->b_ops = &xfs_refcountbt_buf_ops;
>  
>  			block = XFS_BUF_TO_BLOCK(buf);
> -			memset(block, 0, blocksize);
> +			memset(block, 0, get_conf_val(OPT_B, B_SIZE));
>  			libxfs_btree_init_block(mp, buf, XFS_BTNUM_REFC, 0,
>  						0, agno, 0);
>  
> @@ -3503,7 +3637,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  				bsize);
>  		buf->b_ops = &xfs_inobt_buf_ops;
>  		block = XFS_BUF_TO_BLOCK(buf);
> -		memset(block, 0, blocksize);
> +		memset(block, 0, get_conf_val(OPT_B, B_SIZE));
>  		libxfs_btree_init_block(mp, buf, XFS_BTNUM_INO, 0, 0, agno, 0);
>  		libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE);
>  
> @@ -3516,7 +3650,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  					bsize);
>  			buf->b_ops = &xfs_inobt_buf_ops;
>  			block = XFS_BUF_TO_BLOCK(buf);
> -			memset(block, 0, blocksize);
> +			memset(block, 0, get_conf_val(OPT_B, B_SIZE));
>  			libxfs_btree_init_block(mp, buf, XFS_BTNUM_FINO, 0, 0, agno, 0);
>  			libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE);
>  		}
> @@ -3530,7 +3664,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  				bsize);
>  			buf->b_ops = &xfs_rmapbt_buf_ops;
>  			block = XFS_BUF_TO_BLOCK(buf);
> -			memset(block, 0, blocksize);
> +			memset(block, 0, get_conf_val(OPT_B, B_SIZE));
>  
>  			libxfs_btree_init_block(mp, buf, XFS_BTNUM_RMAP, 0, 0, agno, 0);
>  
> @@ -3606,7 +3740,7 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  	 */
>  	buf = libxfs_getbuf(mp->m_ddev_targp,
>  		(xfs_daddr_t)XFS_FSB_TO_BB(mp, dblocks - 1LL), bsize);
> -	memset(XFS_BUF_PTR(buf), 0, blocksize);
> +	memset(XFS_BUF_PTR(buf), 0, get_conf_val(OPT_B, B_SIZE));
>  	libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE);
>  
>  	/*
> @@ -3615,14 +3749,14 @@ _("size %s specified for log subvolume is too large, maximum is %lld blocks\n"),
>  	if (mp->m_rtdev_targp->dev && rtblocks > 0) {
>  		buf = libxfs_getbuf(mp->m_rtdev_targp,
>  				XFS_FSB_TO_BB(mp, rtblocks - 1LL), bsize);
> -		memset(XFS_BUF_PTR(buf), 0, blocksize);
> +		memset(XFS_BUF_PTR(buf), 0, get_conf_val(OPT_B, B_SIZE));
>  		libxfs_writebuf(buf, LIBXFS_EXIT_ON_FAILURE);
>  	}
>  
>  	/*
>  	 * BNO, CNT free block list
>  	 */
> -	for (agno = 0; agno < agcount; agno++) {
> +	for (agno = 0; agno < get_conf_val(OPT_D, D_AGCOUNT); agno++) {
>  		xfs_alloc_arg_t	args;
>  		xfs_trans_t	*tp;
>  		struct xfs_trans_res tres = {0};
> -- 
> 2.13.3
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[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