From patchwork Wed Dec 7 13:27:19 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Tulak X-Patchwork-Id: 9486797 X-Mozilla-Keys: nonjunk Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on sandeen.net X-Spam-Level: X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD autolearn=ham autolearn_force=no version=3.4.0 X-Spam-HP: BAYES_00=-1.9,HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_HI=-5,RP_MATCHES_RCVD=-0.1 X-Original-To: sandeen@sandeen.net Delivered-To: sandeen@sandeen.net Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by sandeen.net (Postfix) with ESMTP id 8F0784796AF for ; Wed, 7 Dec 2016 07:35:09 -0600 (CST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932222AbcLGNgJ (ORCPT ); Wed, 7 Dec 2016 08:36:09 -0500 Received: from mx1.redhat.com ([209.132.183.28]:49452 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752973AbcLGNgH (ORCPT ); Wed, 7 Dec 2016 08:36:07 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 437947DCEF for ; Wed, 7 Dec 2016 13:27:53 +0000 (UTC) Received: from localhost.localdomain (vpn1-6-116.ams2.redhat.com [10.36.6.116]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id uB7DRdo0022223; Wed, 7 Dec 2016 08:27:52 -0500 From: Jan Tulak To: linux-xfs@vger.kernel.org Cc: Jan Tulak Subject: [PATCH 12/22] mkfs: expand conflicts declarations to named declaration Date: Wed, 7 Dec 2016 14:27:19 +0100 Message-Id: <1481117249-21273-13-git-send-email-jtulak@redhat.com> In-Reply-To: <1481117249-21273-1-git-send-email-jtulak@redhat.com> References: <1481117249-21273-1-git-send-email-jtulak@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 07 Dec 2016 13:27:53 +0000 (UTC) Sender: linux-xfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-xfs@vger.kernel.org As we are adding more fields, change from positional to named declarations. Signed-off-by: Jan Tulak Reviewed-by: Bill O'Donnell --- 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, + .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,