diff mbox

[12/22] mkfs: expand conflicts declarations to named declaration

Message ID 1481117249-21273-13-git-send-email-jtulak@redhat.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Jan Tulak Dec. 7, 2016, 1:27 p.m. UTC
As we are adding more fields, change from positional to named declarations.

Signed-off-by: Jan Tulak <jtulak@redhat.com>
---
 mkfs/xfs_mkfs.c | 594 +++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 519 insertions(+), 75 deletions(-)

Comments

Bill O'Donnell Jan. 13, 2017, 5:21 p.m. UTC | #1
On Wed, Dec 07, 2016 at 02:27:19PM +0100, Jan Tulak wrote:
> As we are adding more fields, change from positional to named declarations.
> 
> Signed-off-by: Jan Tulak <jtulak@redhat.com>

minor whitespace issues.

Reviewed-by: Bill O'Donnell <billodo@redhat.com>

> ---
>  mkfs/xfs_mkfs.c | 594 +++++++++++++++++++++++++++++++++++++++++++++++++-------
>  1 file changed, 519 insertions(+), 75 deletions(-)
> 
> diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
> index 58cc24a..b0e5d75 100644
> --- a/mkfs/xfs_mkfs.c
> +++ b/mkfs/xfs_mkfs.c
> @@ -220,7 +220,7 @@ struct opt_params {
>  			long long	invalid_value;
>  			long long	at_value;
>  			const char	*message;
> -		} 		conflicts [MAX_CONFLICTS];
> +		}		conflicts [MAX_CONFLICTS];
>  		long long	minval;
>  		long long	maxval;
>  		long long	defaultval;
> @@ -237,7 +237,13 @@ struct opt_params {
>  		},
>  		.subopt_params = {
>  			{ .index = B_LOG,
> -			  .conflicts = { {OPT_B, B_SIZE, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_B,
> +					  .subopt = B_SIZE,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = XFS_MIN_BLOCKSIZE_LOG,
>  			  .maxval = XFS_MAX_BLOCKSIZE_LOG,
> @@ -246,7 +252,13 @@ struct opt_params {
>  			{ .index = B_SIZE,
>  			  .convert = true,
>  			  .is_power_2 = true,
> -			  .conflicts = { {OPT_B, B_LOG, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_B,
> +					  .subopt = B_LOG,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = XFS_MIN_BLOCKSIZE,
>  			  .maxval = XFS_MAX_BLOCKSIZE,
> @@ -277,7 +289,13 @@ struct opt_params {
>  		},
>  		.subopt_params = {
>  			{ .index = D_AGCOUNT,
> -			  .conflicts = { {OPT_D, D_AGSIZE, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_D,
> +					  .subopt = D_AGSIZE,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = 1,
>  			  .maxval = XFS_MAX_AGNUMBER,
> @@ -301,25 +319,67 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = D_SUNIT,
> -			  .conflicts = { {OPT_D, D_NOALIGN, false, false, 0, 0},
> -					 {OPT_D, D_SU, false, false, 0, 0},
> -					 {OPT_D, D_SW, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_D,
> +					  .subopt = D_NOALIGN,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_D,
> +					  .subopt = D_SU,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_D,
> +					  .subopt = D_SW,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
>  			  .maxval = UINT_MAX,
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = D_SWIDTH,
> -			  .conflicts = { {OPT_D, D_NOALIGN, false, false, 0, 0},
> -					 {OPT_D, D_SU, false, false, 0, 0},
> -					 {OPT_D, D_SW, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_D,
> +					  .subopt = D_NOALIGN,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_D,
> +					  .subopt = D_SU,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_D,
> +					  .subopt = D_SW,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
>  			  .maxval = UINT_MAX,
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = D_AGSIZE,
> -			  .conflicts = { {OPT_D, D_AGCOUNT, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_D,
> +					  .subopt = D_AGCOUNT,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .convert = true,
>  			  .minval = XFS_AG_MIN_BYTES,
> @@ -327,9 +387,27 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = D_SU,
> -			  .conflicts = { {OPT_D, D_NOALIGN, false, false, 0, 0},
> -					 {OPT_D, D_SUNIT, false, false, 0, 0},
> -					 {OPT_D, D_SWIDTH, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_D,
> +					  .subopt = D_NOALIGN,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_D,
> +					  .subopt = D_SUNIT,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_D,
> +					  .subopt = D_SWIDTH,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .convert = true,
>  			  .minval = 0,
> @@ -337,23 +415,53 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = D_SW,
> -			  .conflicts = { {OPT_D, D_NOALIGN, false, false, 0, 0},
> -					 {OPT_D, D_SUNIT, false, false, 0, 0},
> -					 {OPT_D, D_SWIDTH, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_D,
> +					  .subopt = D_NOALIGN,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_D,
> +					  .subopt = D_SUNIT,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_D,
> +					  .subopt = D_SWIDTH,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
>  			  .maxval = UINT_MAX,
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = D_SECTLOG,
> -			  .conflicts = { {OPT_D, D_SECTSIZE, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_D,
> +					  .subopt = D_SECTSIZE,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = XFS_MIN_SECTORSIZE_LOG,
>  			  .maxval = XFS_MAX_SECTORSIZE_LOG,
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = D_SECTSIZE,
> -			  .conflicts = { {OPT_D, D_SECTLOG, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_D,
> +					  .subopt = D_SECTLOG,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .convert = true,
>  			  .is_power_2 = true,
> @@ -362,10 +470,34 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = D_NOALIGN,
> -			  .conflicts = { {OPT_D, D_SU, false, false, 0, 0},
> -					 {OPT_D, D_SW, false, false, 0, 0},
> -					 {OPT_D, D_SUNIT, false, false, 0, 0},
> -					 {OPT_D, D_SWIDTH, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_D,
> +					  .subopt = D_SU,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_D,
> +					  .subopt = D_SW,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_D,
> +					  .subopt = D_SUNIT,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_D,
> +					  .subopt = D_SWIDTH,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
>  			  .maxval = 1,
> @@ -407,7 +539,13 @@ struct opt_params {
>  		},
>  		.subopt_params = {
>  			{ .index = I_ALIGN,
> -			  .conflicts = { {OPT_M, M_CRC, true, true, 1, 0,
> +			  .conflicts = { {.opt = OPT_M,
> +					  .subopt = M_CRC,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 1,
> +					  .at_value = 0,
> +					  .message = \
>  		"Inodes always aligned for CRC enabled filesytems."},
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
> @@ -415,8 +553,20 @@ struct opt_params {
>  			  .defaultval = 1,
>  			},
>  			{ .index = I_LOG,
> -			  .conflicts = { {OPT_I, I_PERBLOCK, false, false, 0, 0},
> -					 {OPT_I, I_SIZE, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_I,
> +					  .subopt = I_PERBLOCK,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_I,
> +					  .subopt = I_SIZE,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = XFS_DINODE_MIN_LOG,
>  			  .maxval = XFS_DINODE_MAX_LOG,
> @@ -429,8 +579,20 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = I_PERBLOCK,
> -			  .conflicts = { {OPT_I, I_LOG, false, false, 0, 0},
> -					 {OPT_I, I_SIZE, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_I,
> +					  .subopt = I_LOG,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_I,
> +					  .subopt = I_SIZE,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .is_power_2 = true,
>  			  .minval = XFS_MIN_INODE_PERBLOCK,
> @@ -438,8 +600,20 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = I_SIZE,
> -			  .conflicts = { {OPT_I, I_PERBLOCK, false, false, 0, 0},
> -					 {OPT_I, I_LOG, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_I,
> +					  .subopt = I_PERBLOCK,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_I,
> +					  .subopt = I_LOG,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .is_power_2 = true,
>  			  .minval = XFS_DINODE_MIN_SIZE,
> @@ -447,7 +621,13 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = I_ATTR,
> -			  .conflicts = { {OPT_M, M_CRC, true, true, 1, 1,
> +			  .conflicts = { {.opt = OPT_M,
> +					  .subopt = M_CRC,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 1,
> +					  .at_value = 1,
> +					  .message = \
>  		"V2 attribute format always enabled on CRC enabled filesytems."},
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
> @@ -455,7 +635,13 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = I_PROJID32BIT,
> -			  .conflicts = { {OPT_M, M_CRC, true, true, 1, 0,
> +			  .conflicts = { {.opt = OPT_M,
> +					  .subopt = M_CRC,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 1,
> +					  .at_value = 0,
> +					  .message = \
>  		"32 bit Project IDs always enabled on CRC enabled filesytems."},
>  					 {LAST_CONFLICT} },
>  
> @@ -464,7 +650,13 @@ struct opt_params {
>  			  .defaultval = 1,
>  			},
>  			{ .index = I_SPINODES,
> -			  .conflicts = { {OPT_M, M_CRC, true, true, 0, 1,
> +			  .conflicts = { {.opt = OPT_M,
> +					  .subopt = M_CRC,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 0,
> +					  .at_value = 1,
> +					  .message = \
>  		"Sparse inodes not supported without CRC support."},
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
> @@ -493,15 +685,33 @@ struct opt_params {
>  		},
>  		.subopt_params = {
>  			{ .index = L_AGNUM,
> -			  .conflicts = { {OPT_L, L_DEV, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_L,
> +					  .subopt = L_DEV,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
>  			  .maxval = UINT_MAX,
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = L_INTERNAL,
> -			  .conflicts = { {OPT_L, L_FILE, false, false, 0, 0},
> -					 {OPT_L, L_DEV, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_L,
> +					  .subopt = L_FILE,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_L,
> +					  .subopt = L_DEV,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
>  			  .maxval = 1,
> @@ -515,7 +725,13 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = L_VERSION,
> -			  .conflicts = { {OPT_M, M_CRC, true, true, 1, 1,
> +			  .conflicts = {{.opt = OPT_M,
> +					  .subopt = M_CRC,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 1,
> +					  .at_value = 1,
> +					  .message =
>  				"V2 logs are required for CRC enabled filesystems."},
>  					 {LAST_CONFLICT} },
>  			  .minval = 1,
> @@ -523,14 +739,26 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = L_SUNIT,
> -			  .conflicts = { {OPT_L, L_SU, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_L,
> +					  .subopt = L_SU,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = 1,
>  			  .maxval = BTOBB(XLOG_MAX_RECORD_BSIZE),
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = L_SU,
> -			  .conflicts = { {OPT_L, L_SUNIT, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_L,
> +					  .subopt = L_SUNIT,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .convert = true,
>  			  .minval = BBTOB(1),
> @@ -538,20 +766,44 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = L_DEV,
> -			  .conflicts = { {OPT_L, L_AGNUM, false, false, 0, 0},
> -					 {OPT_L, L_INTERNAL, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_L,
> +					  .subopt = L_AGNUM,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_L,
> +					  .subopt = L_INTERNAL,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = L_SECTLOG,
> -			  .conflicts = { {OPT_L, L_SECTSIZE, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_L,
> +					  .subopt = L_SECTSIZE,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = XFS_MIN_SECTORSIZE_LOG,
>  			  .maxval = XFS_MAX_SECTORSIZE_LOG,
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = L_SECTSIZE,
> -			  .conflicts = { {OPT_L, L_SECTLOG, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_L,
> +					  .subopt = L_SECTLOG,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .convert = true,
>  			  .is_power_2 = true,
> @@ -560,20 +812,44 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = L_FILE,
> -			  .conflicts = { {OPT_L, L_INTERNAL, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_L,
> +					  .subopt = L_INTERNAL,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
>  			  .maxval = 1,
>  			  .defaultval = 1,
>  			},
>  			{ .index = L_NAME,
> -			  .conflicts = { {OPT_L, L_AGNUM, false, false, 0, 0},
> -					 {OPT_L, L_INTERNAL, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_L,
> +					  .subopt = L_AGNUM,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_L,
> +					  .subopt = L_INTERNAL,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = L_LAZYSBCNTR,
> -			  .conflicts = { {OPT_M, M_CRC, true, true, 1, 0,
> +			  .conflicts = { {.opt = OPT_M,
> +					  .subopt = M_CRC,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 1,
> +					  .at_value = 0,
> +					  .message =
>  		"Lazy superblock counted always enabled for CRC enabled filesytems."},
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
> @@ -594,14 +870,26 @@ struct opt_params {
>  		},
>  		.subopt_params = {
>  			{ .index = N_LOG,
> -			  .conflicts = { {OPT_N, N_SIZE, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_N,
> +					  .subopt = N_SIZE,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = XFS_MIN_REC_DIRSIZE,
>  			  .maxval = XFS_MAX_BLOCKSIZE_LOG,
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = N_SIZE,
> -			  .conflicts = { {OPT_N, N_LOG, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_N,
> +					  .subopt = N_LOG,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .convert = true,
>  			  .is_power_2 = true,
> @@ -616,7 +904,13 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = N_FTYPE,
> -			  .conflicts = {  {OPT_M, M_CRC, true, true, 1, 0,
> +			  .conflicts = {  {.opt = OPT_M,
> +					  .subopt = M_CRC,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 1,
> +					  .at_value = 0,
> +					  .message =
>  		"Cannot disable ftype with crcs enabled."},
>  					  {LAST_CONFLICT} },
>  			  .minval = 0,
> @@ -653,7 +947,13 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = R_DEV,
> -			  .conflicts = { {OPT_M, M_RMAPBT, false, true, 0, 0,
> +			  .conflicts = { {.opt = OPT_M,
> +				  	  .subopt = M_RMAPBT,

whitespace issue above ^^^

> +					  .test_values = false,
> +					  .test_default_value = true,
> +					  .invalid_value = 0,
> +					  .at_value = 0,
> +					  .message =
>  		"rmapbt not supported without CRC support."},
>  					 {LAST_CONFLICT} },
>  			  .defaultval = SUBOPT_NEEDS_VAL,
> @@ -665,7 +965,13 @@ struct opt_params {
>  			  .conflicts = { {LAST_CONFLICT} },
>  			},
>  			{ .index = R_NAME,
> -			  .conflicts = { {OPT_M, M_RMAPBT, false, true, 0, 0,
> +			  .conflicts = { {.opt = OPT_M,
> +				  	  .subopt = M_RMAPBT,

whitespace issue above ^^^

> +					  .test_values = false,
> +					  .test_default_value = true,
> +					  .invalid_value = 0,
> +					  .at_value = 0,
> +					  .message =
>  		"rmapbt not supported without CRC support."},
>  					 {LAST_CONFLICT} },
>  			  .defaultval = SUBOPT_NEEDS_VAL,
> @@ -690,24 +996,60 @@ struct opt_params {
>  		},
>  		.subopt_params = {
>  			{ .index = S_LOG,
> -			  .conflicts = { {OPT_S, S_SIZE, false, false, 0, 0},
> -					 {OPT_S, S_SECTSIZE, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_S,
> +					  .subopt = S_SIZE,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_S,
> +					  .subopt = S_SECTSIZE,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = XFS_MIN_SECTORSIZE_LOG,
>  			  .maxval = XFS_MAX_SECTORSIZE_LOG,
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = S_SECTLOG,
> -			  .conflicts = { {OPT_S, S_SIZE, false, false, 0, 0},
> -					 {OPT_S, S_SECTSIZE, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_S,
> +					  .subopt = S_SIZE,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_S,
> +					  .subopt = S_SECTSIZE,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .minval = XFS_MIN_SECTORSIZE_LOG,
>  			  .maxval = XFS_MAX_SECTORSIZE_LOG,
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = S_SIZE,
> -			  .conflicts = { {OPT_S, S_LOG, false, false, 0, 0},
> -					 {OPT_S, S_SECTLOG, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_S,
> +					  .subopt = S_LOG,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_S,
> +					  .subopt = S_SECTLOG,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .convert = true,
>  			  .is_power_2 = true,
> @@ -716,8 +1058,20 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = S_SECTSIZE,
> -			  .conflicts = { {OPT_S, S_LOG, false, false, 0, 0},
> -					 {OPT_S, S_SECTLOG, false, false, 0, 0},
> +			  .conflicts = { {.opt = OPT_S,
> +					  .subopt = S_LOG,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
> +					 {.opt = OPT_S,
> +					  .subopt = S_SECTLOG,
> +					  .test_values = false,
> +					  .test_default_value = false,
> +					  .invalid_value = 0,
> +					  .at_value = 0
> +					 },
>  					 {LAST_CONFLICT} },
>  			  .convert = true,
>  			  .is_power_2 = true,
> @@ -740,25 +1094,85 @@ struct opt_params {
>  		},
>  		.subopt_params = {
>  			{ .index = M_CRC,
> -			  .conflicts = { {OPT_L, L_VERSION, true, true, 1, 1,
> +			  .conflicts = { {.opt = OPT_L,
> +					  .subopt = L_VERSION,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 1,
> +					  .at_value = 1,
> +					  .message =
>  		"V2 logs are required for CRC enabled filesystems."},
> -					 {OPT_I, I_ALIGN, false, true, 0, 1,
> +					 {.opt = OPT_I,
> +					  .subopt = I_ALIGN,
> +					  .test_values = false,
> +					  .test_default_value = true,
> +					  .invalid_value = 0,
> +					  .at_value = 1,
> +					  .message =
>  		"Inodes always aligned for CRC enabled filesytems."},
> -					 {OPT_I, I_PROJID32BIT, true, true, 0, 1,
> +					 {.opt = OPT_I,
> +					  .subopt = I_PROJID32BIT,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 0,
> +					  .at_value = 1,
> +					  .message =
>  		"32 bit Project IDs always enabled on CRC enabled filesytems."},
> -					 {OPT_I, I_ATTR, true, true, 1, 1,
> +					 {.opt = OPT_I,
> +					  .subopt = I_ATTR,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 1,
> +					  .at_value = 1,
> +					  .message =
>  		"V2 attribute format always enabled on CRC enabled filesytems."},
> -					 {OPT_L, L_LAZYSBCNTR, true, true, 0, 1,
> +					 {.opt = OPT_L,
> +					  .subopt = L_LAZYSBCNTR,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 0,
> +					  .at_value = 1,
> +					  .message =
>  		"Lazy superblock counted always enabled for CRC enabled filesytems."},
> -					 {OPT_M, M_FINOBT, true, true, 1, 0,
> +					 {.opt = OPT_M,
> +					  .subopt = M_FINOBT,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 1,
> +					  .at_value = 0,
> +					  .message =
>  		"Finobt not supported without CRC support."},
> -					 {OPT_M, M_RMAPBT, true, true, 1, 0,
> +					 {.opt = OPT_M,
> +				  	  .subopt = M_RMAPBT,

minor whitespace issue above ^^^

> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 1,
> +					  .at_value = 0,
> +					  .message =
>  		"rmapbt not supported without CRC support."},
> -					 {OPT_M, M_REFLINK, true, true, 1, 0,
> +					 {.opt = OPT_M,
> +				  	  .subopt = M_REFLINK,

minor whitespace issue above ^^^

> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 1,
> +					  .at_value = 0,
> +					  .message =
>  		"reflink not supported without CRC support."},
> -					 {OPT_I, I_SPINODES, true, true, 1, 0,
> +					 {.opt = OPT_I,
> +					  .subopt = I_SPINODES,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 1,
> +					  .at_value = 0,
> +					  .message =
>  		"Sparse inodes not supported without CRC support."},
> -					 {OPT_N, N_FTYPE, true, true, 0, 1,
> +					 {.opt = OPT_N,
> +					  .subopt = N_FTYPE,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 0,
> +					  .at_value = 1,
> +					  .message =
>  		"Cannot disable ftype with crcs enabled."},
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
> @@ -766,7 +1180,13 @@ struct opt_params {
>  			  .defaultval = 1,
>  			},
>  			{ .index = M_FINOBT,
> -			  .conflicts = { {OPT_M, M_CRC, true, true, 0, 1,
> +			  .conflicts = { {.opt = OPT_M,
> +					  .subopt = M_CRC,
> +					  .test_values = true,
> +					  .test_default_value = true,
> +					  .invalid_value = 0,
> +					  .at_value = 1,
> +					  .message =
>  		"Finobt not supported without CRC support."},
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
> @@ -778,11 +1198,29 @@ struct opt_params {
>  			  .defaultval = SUBOPT_NEEDS_VAL,
>  			},
>  			{ .index = M_RMAPBT,
> -			.conflicts = { {OPT_M, M_CRC, true, true, 0, 1,
> +			.conflicts = { {.opt = OPT_M,
> +					.subopt = M_CRC,
> +					.test_values = true,
> +					.test_default_value = true,
> +					.invalid_value = 0,
> +					.at_value = 1,
> +					.message =
>  		"rmapbt not supported without CRC support."},
> -					{OPT_R, R_NAME, false, true, 0, 0,
> +					{.opt = OPT_R,
> +					 .subopt = R_NAME,
> +					 .test_values = false,
> +					 .test_default_value = true,
> +					 .invalid_value = 0,
> +					 .at_value = 0,
> +					 .message =
>  		"rmapbt not supported with realtime devices."},
> -					{OPT_R, R_DEV, false, true, 0, 0,
> +					{.opt = OPT_R,
> +					 .subopt = R_DEV,
> +					 .test_values = false,
> +					 .test_default_value = true,
> +					 .invalid_value = 0,
> +					 .at_value = 0,
> +					 .message =
>  		"rmapbt not supported with realtime devices."},
>  				       {LAST_CONFLICT} },
>  			.minval = 0,
> @@ -790,7 +1228,13 @@ struct opt_params {
>  			.defaultval = 0,
>  			},
>  			{ .index = M_REFLINK,
> -			  .conflicts = { {OPT_M, M_CRC, true, true, 0, 1,
> +			.conflicts = { {.opt = OPT_M,
> +					.subopt = M_CRC,
> +					.test_values = true,
> +					.test_default_value = true,
> +					.invalid_value = 0,
> +					.at_value = 1,
> +					.message =
>  		"reflink not supported without CRC support."},
>  					 {LAST_CONFLICT} },
>  			  .minval = 0,
> -- 
> 2.8.1
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@vger.kernel.org
> 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@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
index 58cc24a..b0e5d75 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -220,7 +220,7 @@  struct opt_params {
 			long long	invalid_value;
 			long long	at_value;
 			const char	*message;
-		} 		conflicts [MAX_CONFLICTS];
+		}		conflicts [MAX_CONFLICTS];
 		long long	minval;
 		long long	maxval;
 		long long	defaultval;
@@ -237,7 +237,13 @@  struct opt_params {
 		},
 		.subopt_params = {
 			{ .index = B_LOG,
-			  .conflicts = { {OPT_B, B_SIZE, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_B,
+					  .subopt = B_SIZE,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = XFS_MIN_BLOCKSIZE_LOG,
 			  .maxval = XFS_MAX_BLOCKSIZE_LOG,
@@ -246,7 +252,13 @@  struct opt_params {
 			{ .index = B_SIZE,
 			  .convert = true,
 			  .is_power_2 = true,
-			  .conflicts = { {OPT_B, B_LOG, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_B,
+					  .subopt = B_LOG,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = XFS_MIN_BLOCKSIZE,
 			  .maxval = XFS_MAX_BLOCKSIZE,
@@ -277,7 +289,13 @@  struct opt_params {
 		},
 		.subopt_params = {
 			{ .index = D_AGCOUNT,
-			  .conflicts = { {OPT_D, D_AGSIZE, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_D,
+					  .subopt = D_AGSIZE,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = 1,
 			  .maxval = XFS_MAX_AGNUMBER,
@@ -301,25 +319,67 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = D_SUNIT,
-			  .conflicts = { {OPT_D, D_NOALIGN, false, false, 0, 0},
-					 {OPT_D, D_SU, false, false, 0, 0},
-					 {OPT_D, D_SW, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_D,
+					  .subopt = D_NOALIGN,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_D,
+					  .subopt = D_SU,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_D,
+					  .subopt = D_SW,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = 0,
 			  .maxval = UINT_MAX,
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = D_SWIDTH,
-			  .conflicts = { {OPT_D, D_NOALIGN, false, false, 0, 0},
-					 {OPT_D, D_SU, false, false, 0, 0},
-					 {OPT_D, D_SW, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_D,
+					  .subopt = D_NOALIGN,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_D,
+					  .subopt = D_SU,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_D,
+					  .subopt = D_SW,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = 0,
 			  .maxval = UINT_MAX,
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = D_AGSIZE,
-			  .conflicts = { {OPT_D, D_AGCOUNT, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_D,
+					  .subopt = D_AGCOUNT,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .convert = true,
 			  .minval = XFS_AG_MIN_BYTES,
@@ -327,9 +387,27 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = D_SU,
-			  .conflicts = { {OPT_D, D_NOALIGN, false, false, 0, 0},
-					 {OPT_D, D_SUNIT, false, false, 0, 0},
-					 {OPT_D, D_SWIDTH, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_D,
+					  .subopt = D_NOALIGN,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_D,
+					  .subopt = D_SUNIT,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_D,
+					  .subopt = D_SWIDTH,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .convert = true,
 			  .minval = 0,
@@ -337,23 +415,53 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = D_SW,
-			  .conflicts = { {OPT_D, D_NOALIGN, false, false, 0, 0},
-					 {OPT_D, D_SUNIT, false, false, 0, 0},
-					 {OPT_D, D_SWIDTH, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_D,
+					  .subopt = D_NOALIGN,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_D,
+					  .subopt = D_SUNIT,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_D,
+					  .subopt = D_SWIDTH,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = 0,
 			  .maxval = UINT_MAX,
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = D_SECTLOG,
-			  .conflicts = { {OPT_D, D_SECTSIZE, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_D,
+					  .subopt = D_SECTSIZE,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = XFS_MIN_SECTORSIZE_LOG,
 			  .maxval = XFS_MAX_SECTORSIZE_LOG,
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = D_SECTSIZE,
-			  .conflicts = { {OPT_D, D_SECTLOG, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_D,
+					  .subopt = D_SECTLOG,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .convert = true,
 			  .is_power_2 = true,
@@ -362,10 +470,34 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = D_NOALIGN,
-			  .conflicts = { {OPT_D, D_SU, false, false, 0, 0},
-					 {OPT_D, D_SW, false, false, 0, 0},
-					 {OPT_D, D_SUNIT, false, false, 0, 0},
-					 {OPT_D, D_SWIDTH, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_D,
+					  .subopt = D_SU,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_D,
+					  .subopt = D_SW,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_D,
+					  .subopt = D_SUNIT,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_D,
+					  .subopt = D_SWIDTH,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = 0,
 			  .maxval = 1,
@@ -407,7 +539,13 @@  struct opt_params {
 		},
 		.subopt_params = {
 			{ .index = I_ALIGN,
-			  .conflicts = { {OPT_M, M_CRC, true, true, 1, 0,
+			  .conflicts = { {.opt = OPT_M,
+					  .subopt = M_CRC,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 1,
+					  .at_value = 0,
+					  .message = \
 		"Inodes always aligned for CRC enabled filesytems."},
 					 {LAST_CONFLICT} },
 			  .minval = 0,
@@ -415,8 +553,20 @@  struct opt_params {
 			  .defaultval = 1,
 			},
 			{ .index = I_LOG,
-			  .conflicts = { {OPT_I, I_PERBLOCK, false, false, 0, 0},
-					 {OPT_I, I_SIZE, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_I,
+					  .subopt = I_PERBLOCK,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_I,
+					  .subopt = I_SIZE,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = XFS_DINODE_MIN_LOG,
 			  .maxval = XFS_DINODE_MAX_LOG,
@@ -429,8 +579,20 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = I_PERBLOCK,
-			  .conflicts = { {OPT_I, I_LOG, false, false, 0, 0},
-					 {OPT_I, I_SIZE, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_I,
+					  .subopt = I_LOG,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_I,
+					  .subopt = I_SIZE,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .is_power_2 = true,
 			  .minval = XFS_MIN_INODE_PERBLOCK,
@@ -438,8 +600,20 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = I_SIZE,
-			  .conflicts = { {OPT_I, I_PERBLOCK, false, false, 0, 0},
-					 {OPT_I, I_LOG, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_I,
+					  .subopt = I_PERBLOCK,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_I,
+					  .subopt = I_LOG,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .is_power_2 = true,
 			  .minval = XFS_DINODE_MIN_SIZE,
@@ -447,7 +621,13 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = I_ATTR,
-			  .conflicts = { {OPT_M, M_CRC, true, true, 1, 1,
+			  .conflicts = { {.opt = OPT_M,
+					  .subopt = M_CRC,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 1,
+					  .at_value = 1,
+					  .message = \
 		"V2 attribute format always enabled on CRC enabled filesytems."},
 					 {LAST_CONFLICT} },
 			  .minval = 0,
@@ -455,7 +635,13 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = I_PROJID32BIT,
-			  .conflicts = { {OPT_M, M_CRC, true, true, 1, 0,
+			  .conflicts = { {.opt = OPT_M,
+					  .subopt = M_CRC,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 1,
+					  .at_value = 0,
+					  .message = \
 		"32 bit Project IDs always enabled on CRC enabled filesytems."},
 					 {LAST_CONFLICT} },
 
@@ -464,7 +650,13 @@  struct opt_params {
 			  .defaultval = 1,
 			},
 			{ .index = I_SPINODES,
-			  .conflicts = { {OPT_M, M_CRC, true, true, 0, 1,
+			  .conflicts = { {.opt = OPT_M,
+					  .subopt = M_CRC,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 0,
+					  .at_value = 1,
+					  .message = \
 		"Sparse inodes not supported without CRC support."},
 					 {LAST_CONFLICT} },
 			  .minval = 0,
@@ -493,15 +685,33 @@  struct opt_params {
 		},
 		.subopt_params = {
 			{ .index = L_AGNUM,
-			  .conflicts = { {OPT_L, L_DEV, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_L,
+					  .subopt = L_DEV,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = 0,
 			  .maxval = UINT_MAX,
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = L_INTERNAL,
-			  .conflicts = { {OPT_L, L_FILE, false, false, 0, 0},
-					 {OPT_L, L_DEV, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_L,
+					  .subopt = L_FILE,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_L,
+					  .subopt = L_DEV,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = 0,
 			  .maxval = 1,
@@ -515,7 +725,13 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = L_VERSION,
-			  .conflicts = { {OPT_M, M_CRC, true, true, 1, 1,
+			  .conflicts = {{.opt = OPT_M,
+					  .subopt = M_CRC,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 1,
+					  .at_value = 1,
+					  .message =
 				"V2 logs are required for CRC enabled filesystems."},
 					 {LAST_CONFLICT} },
 			  .minval = 1,
@@ -523,14 +739,26 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = L_SUNIT,
-			  .conflicts = { {OPT_L, L_SU, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_L,
+					  .subopt = L_SU,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = 1,
 			  .maxval = BTOBB(XLOG_MAX_RECORD_BSIZE),
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = L_SU,
-			  .conflicts = { {OPT_L, L_SUNIT, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_L,
+					  .subopt = L_SUNIT,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .convert = true,
 			  .minval = BBTOB(1),
@@ -538,20 +766,44 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = L_DEV,
-			  .conflicts = { {OPT_L, L_AGNUM, false, false, 0, 0},
-					 {OPT_L, L_INTERNAL, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_L,
+					  .subopt = L_AGNUM,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_L,
+					  .subopt = L_INTERNAL,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = L_SECTLOG,
-			  .conflicts = { {OPT_L, L_SECTSIZE, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_L,
+					  .subopt = L_SECTSIZE,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = XFS_MIN_SECTORSIZE_LOG,
 			  .maxval = XFS_MAX_SECTORSIZE_LOG,
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = L_SECTSIZE,
-			  .conflicts = { {OPT_L, L_SECTLOG, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_L,
+					  .subopt = L_SECTLOG,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .convert = true,
 			  .is_power_2 = true,
@@ -560,20 +812,44 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = L_FILE,
-			  .conflicts = { {OPT_L, L_INTERNAL, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_L,
+					  .subopt = L_INTERNAL,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = 0,
 			  .maxval = 1,
 			  .defaultval = 1,
 			},
 			{ .index = L_NAME,
-			  .conflicts = { {OPT_L, L_AGNUM, false, false, 0, 0},
-					 {OPT_L, L_INTERNAL, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_L,
+					  .subopt = L_AGNUM,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_L,
+					  .subopt = L_INTERNAL,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = L_LAZYSBCNTR,
-			  .conflicts = { {OPT_M, M_CRC, true, true, 1, 0,
+			  .conflicts = { {.opt = OPT_M,
+					  .subopt = M_CRC,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 1,
+					  .at_value = 0,
+					  .message =
 		"Lazy superblock counted always enabled for CRC enabled filesytems."},
 					 {LAST_CONFLICT} },
 			  .minval = 0,
@@ -594,14 +870,26 @@  struct opt_params {
 		},
 		.subopt_params = {
 			{ .index = N_LOG,
-			  .conflicts = { {OPT_N, N_SIZE, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_N,
+					  .subopt = N_SIZE,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = XFS_MIN_REC_DIRSIZE,
 			  .maxval = XFS_MAX_BLOCKSIZE_LOG,
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = N_SIZE,
-			  .conflicts = { {OPT_N, N_LOG, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_N,
+					  .subopt = N_LOG,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .convert = true,
 			  .is_power_2 = true,
@@ -616,7 +904,13 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = N_FTYPE,
-			  .conflicts = {  {OPT_M, M_CRC, true, true, 1, 0,
+			  .conflicts = {  {.opt = OPT_M,
+					  .subopt = M_CRC,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 1,
+					  .at_value = 0,
+					  .message =
 		"Cannot disable ftype with crcs enabled."},
 					  {LAST_CONFLICT} },
 			  .minval = 0,
@@ -653,7 +947,13 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = R_DEV,
-			  .conflicts = { {OPT_M, M_RMAPBT, false, true, 0, 0,
+			  .conflicts = { {.opt = OPT_M,
+				  	  .subopt = M_RMAPBT,
+					  .test_values = false,
+					  .test_default_value = true,
+					  .invalid_value = 0,
+					  .at_value = 0,
+					  .message =
 		"rmapbt not supported without CRC support."},
 					 {LAST_CONFLICT} },
 			  .defaultval = SUBOPT_NEEDS_VAL,
@@ -665,7 +965,13 @@  struct opt_params {
 			  .conflicts = { {LAST_CONFLICT} },
 			},
 			{ .index = R_NAME,
-			  .conflicts = { {OPT_M, M_RMAPBT, false, true, 0, 0,
+			  .conflicts = { {.opt = OPT_M,
+				  	  .subopt = M_RMAPBT,
+					  .test_values = false,
+					  .test_default_value = true,
+					  .invalid_value = 0,
+					  .at_value = 0,
+					  .message =
 		"rmapbt not supported without CRC support."},
 					 {LAST_CONFLICT} },
 			  .defaultval = SUBOPT_NEEDS_VAL,
@@ -690,24 +996,60 @@  struct opt_params {
 		},
 		.subopt_params = {
 			{ .index = S_LOG,
-			  .conflicts = { {OPT_S, S_SIZE, false, false, 0, 0},
-					 {OPT_S, S_SECTSIZE, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_S,
+					  .subopt = S_SIZE,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_S,
+					  .subopt = S_SECTSIZE,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = XFS_MIN_SECTORSIZE_LOG,
 			  .maxval = XFS_MAX_SECTORSIZE_LOG,
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = S_SECTLOG,
-			  .conflicts = { {OPT_S, S_SIZE, false, false, 0, 0},
-					 {OPT_S, S_SECTSIZE, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_S,
+					  .subopt = S_SIZE,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_S,
+					  .subopt = S_SECTSIZE,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .minval = XFS_MIN_SECTORSIZE_LOG,
 			  .maxval = XFS_MAX_SECTORSIZE_LOG,
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = S_SIZE,
-			  .conflicts = { {OPT_S, S_LOG, false, false, 0, 0},
-					 {OPT_S, S_SECTLOG, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_S,
+					  .subopt = S_LOG,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_S,
+					  .subopt = S_SECTLOG,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .convert = true,
 			  .is_power_2 = true,
@@ -716,8 +1058,20 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = S_SECTSIZE,
-			  .conflicts = { {OPT_S, S_LOG, false, false, 0, 0},
-					 {OPT_S, S_SECTLOG, false, false, 0, 0},
+			  .conflicts = { {.opt = OPT_S,
+					  .subopt = S_LOG,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
+					 {.opt = OPT_S,
+					  .subopt = S_SECTLOG,
+					  .test_values = false,
+					  .test_default_value = false,
+					  .invalid_value = 0,
+					  .at_value = 0
+					 },
 					 {LAST_CONFLICT} },
 			  .convert = true,
 			  .is_power_2 = true,
@@ -740,25 +1094,85 @@  struct opt_params {
 		},
 		.subopt_params = {
 			{ .index = M_CRC,
-			  .conflicts = { {OPT_L, L_VERSION, true, true, 1, 1,
+			  .conflicts = { {.opt = OPT_L,
+					  .subopt = L_VERSION,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 1,
+					  .at_value = 1,
+					  .message =
 		"V2 logs are required for CRC enabled filesystems."},
-					 {OPT_I, I_ALIGN, false, true, 0, 1,
+					 {.opt = OPT_I,
+					  .subopt = I_ALIGN,
+					  .test_values = false,
+					  .test_default_value = true,
+					  .invalid_value = 0,
+					  .at_value = 1,
+					  .message =
 		"Inodes always aligned for CRC enabled filesytems."},
-					 {OPT_I, I_PROJID32BIT, true, true, 0, 1,
+					 {.opt = OPT_I,
+					  .subopt = I_PROJID32BIT,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 0,
+					  .at_value = 1,
+					  .message =
 		"32 bit Project IDs always enabled on CRC enabled filesytems."},
-					 {OPT_I, I_ATTR, true, true, 1, 1,
+					 {.opt = OPT_I,
+					  .subopt = I_ATTR,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 1,
+					  .at_value = 1,
+					  .message =
 		"V2 attribute format always enabled on CRC enabled filesytems."},
-					 {OPT_L, L_LAZYSBCNTR, true, true, 0, 1,
+					 {.opt = OPT_L,
+					  .subopt = L_LAZYSBCNTR,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 0,
+					  .at_value = 1,
+					  .message =
 		"Lazy superblock counted always enabled for CRC enabled filesytems."},
-					 {OPT_M, M_FINOBT, true, true, 1, 0,
+					 {.opt = OPT_M,
+					  .subopt = M_FINOBT,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 1,
+					  .at_value = 0,
+					  .message =
 		"Finobt not supported without CRC support."},
-					 {OPT_M, M_RMAPBT, true, true, 1, 0,
+					 {.opt = OPT_M,
+				  	  .subopt = M_RMAPBT,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 1,
+					  .at_value = 0,
+					  .message =
 		"rmapbt not supported without CRC support."},
-					 {OPT_M, M_REFLINK, true, true, 1, 0,
+					 {.opt = OPT_M,
+				  	  .subopt = M_REFLINK,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 1,
+					  .at_value = 0,
+					  .message =
 		"reflink not supported without CRC support."},
-					 {OPT_I, I_SPINODES, true, true, 1, 0,
+					 {.opt = OPT_I,
+					  .subopt = I_SPINODES,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 1,
+					  .at_value = 0,
+					  .message =
 		"Sparse inodes not supported without CRC support."},
-					 {OPT_N, N_FTYPE, true, true, 0, 1,
+					 {.opt = OPT_N,
+					  .subopt = N_FTYPE,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 0,
+					  .at_value = 1,
+					  .message =
 		"Cannot disable ftype with crcs enabled."},
 					 {LAST_CONFLICT} },
 			  .minval = 0,
@@ -766,7 +1180,13 @@  struct opt_params {
 			  .defaultval = 1,
 			},
 			{ .index = M_FINOBT,
-			  .conflicts = { {OPT_M, M_CRC, true, true, 0, 1,
+			  .conflicts = { {.opt = OPT_M,
+					  .subopt = M_CRC,
+					  .test_values = true,
+					  .test_default_value = true,
+					  .invalid_value = 0,
+					  .at_value = 1,
+					  .message =
 		"Finobt not supported without CRC support."},
 					 {LAST_CONFLICT} },
 			  .minval = 0,
@@ -778,11 +1198,29 @@  struct opt_params {
 			  .defaultval = SUBOPT_NEEDS_VAL,
 			},
 			{ .index = M_RMAPBT,
-			.conflicts = { {OPT_M, M_CRC, true, true, 0, 1,
+			.conflicts = { {.opt = OPT_M,
+					.subopt = M_CRC,
+					.test_values = true,
+					.test_default_value = true,
+					.invalid_value = 0,
+					.at_value = 1,
+					.message =
 		"rmapbt not supported without CRC support."},
-					{OPT_R, R_NAME, false, true, 0, 0,
+					{.opt = OPT_R,
+					 .subopt = R_NAME,
+					 .test_values = false,
+					 .test_default_value = true,
+					 .invalid_value = 0,
+					 .at_value = 0,
+					 .message =
 		"rmapbt not supported with realtime devices."},
-					{OPT_R, R_DEV, false, true, 0, 0,
+					{.opt = OPT_R,
+					 .subopt = R_DEV,
+					 .test_values = false,
+					 .test_default_value = true,
+					 .invalid_value = 0,
+					 .at_value = 0,
+					 .message =
 		"rmapbt not supported with realtime devices."},
 				       {LAST_CONFLICT} },
 			.minval = 0,
@@ -790,7 +1228,13 @@  struct opt_params {
 			.defaultval = 0,
 			},
 			{ .index = M_REFLINK,
-			  .conflicts = { {OPT_M, M_CRC, true, true, 0, 1,
+			.conflicts = { {.opt = OPT_M,
+					.subopt = M_CRC,
+					.test_values = true,
+					.test_default_value = true,
+					.invalid_value = 0,
+					.at_value = 1,
+					.message =
 		"reflink not supported without CRC support."},
 					 {LAST_CONFLICT} },
 			  .minval = 0,