xfs
[Top] [All Lists]

[PATCH 8/8] mkfs: move conflicts into the table

To: xfs@xxxxxxxxxxx
Subject: [PATCH 8/8] mkfs: move conflicts into the table
From: Jan Tulak <jtulak@xxxxxxxxxx>
Date: Tue, 2 Aug 2016 17:42:19 +0200
Cc: Jan Tulak <jtulak@xxxxxxxxxx>
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1470152539-18759-1-git-send-email-jtulak@xxxxxxxxxx>
References: <1470152539-18759-1-git-send-email-jtulak@xxxxxxxxxx>
Fill the table with conflicts data and remove now-duplicate code for their
detection from other parts of mkfs.

Signed-off-by: Jan Tulak <jtulak@xxxxxxxxxx>
---
 mkfs/xfs_mkfs.c | 109 ++++++++++++++++++++++++++------------------------------
 1 file changed, 50 insertions(+), 59 deletions(-)

diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c
index 91c7fee..44fa65a 100644
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -45,7 +45,7 @@ unsigned int          sectorsize;
 #define MAX_OPTS       16
 #define MAX_SUBOPTS    16
 #define SUBOPT_NEEDS_VAL       (-1LL)
-#define MAX_CONFLICTS  8
+#define MAX_CONFLICTS  32
 #define LAST_CONFLICT  (-1)
 
 #define OPT_B          0
@@ -407,7 +407,9 @@ struct opt_params {
                },
                .subopt_params = {
                        { .index = I_ALIGN,
-                         .conflicts = { {LAST_CONFLICT} },
+                         .conflicts = { {OPT_M, M_CRC, true, 1, 0,
+               "Inodes always aligned for CRC enabled filesytems."},
+                                        {LAST_CONFLICT} },
                          .minval = 0,
                          .maxval = 1,
                          .defaultval = 1,
@@ -445,19 +447,26 @@ struct opt_params {
                          .defaultval = SUBOPT_NEEDS_VAL,
                        },
                        { .index = I_ATTR,
-                         .conflicts = { {LAST_CONFLICT} },
+                         .conflicts = { {OPT_M, M_CRC, true, 1, 1,
+               "V2 attribute format always enabled on CRC enabled 
filesytems."},
+                                        {LAST_CONFLICT} },
                          .minval = 0,
                          .maxval = 2,
                          .defaultval = SUBOPT_NEEDS_VAL,
                        },
                        { .index = I_PROJID32BIT,
-                         .conflicts = { {LAST_CONFLICT} },
+                         .conflicts = { {OPT_M, M_CRC, true, 1, 0,
+               "32 bit Project IDs always enabled on CRC enabled filesytems."},
+                                        {LAST_CONFLICT} },
+
                          .minval = 0,
                          .maxval = 1,
                          .defaultval = 1,
                        },
                        { .index = I_SPINODES,
-                         .conflicts = { {LAST_CONFLICT} },
+                         .conflicts = { {OPT_M, M_CRC, true, 0, 1,
+               "Sparse inodes not supported without CRC support."},
+                                        {LAST_CONFLICT} },
                          .minval = 0,
                          .maxval = 1,
                          .defaultval = 1,
@@ -506,7 +515,9 @@ struct opt_params {
                          .defaultval = SUBOPT_NEEDS_VAL,
                        },
                        { .index = L_VERSION,
-                         .conflicts = { {LAST_CONFLICT} },
+                         .conflicts = { {OPT_M, M_CRC, true, 1, 1,
+                               "V2 logs are required for CRC enabled 
filesystems."},
+                                        {LAST_CONFLICT} },
                          .minval = 1,
                          .maxval = 2,
                          .defaultval = SUBOPT_NEEDS_VAL,
@@ -562,7 +573,9 @@ struct opt_params {
                          .defaultval = SUBOPT_NEEDS_VAL,
                        },
                        { .index = L_LAZYSBCNTR,
-                         .conflicts = { {LAST_CONFLICT} },
+                         .conflicts = { {OPT_M, M_CRC, true, 1, 0,
+               "Lazy superblock counted always enabled for CRC enabled 
filesytems."},
+                                        {LAST_CONFLICT} },
                          .minval = 0,
                          .maxval = 1,
                          .defaultval = 1,
@@ -603,7 +616,9 @@ struct opt_params {
                          .defaultval = SUBOPT_NEEDS_VAL,
                        },
                        { .index = N_FTYPE,
-                         .conflicts = { {LAST_CONFLICT} },
+                         .conflicts = {  {OPT_M, M_CRC, true, 1, 0,
+               "Cannot disable ftype with crcs enabled."},
+                                         {LAST_CONFLICT} },
                          .minval = 0,
                          .maxval = 1,
                          .defaultval = 1,
@@ -719,13 +734,31 @@ struct opt_params {
                },
                .subopt_params = {
                        { .index = M_CRC,
-                         .conflicts = { {LAST_CONFLICT} },
+                         .conflicts = { {OPT_L, L_VERSION, true, 1, 1,
+               "V2 logs are required for CRC enabled filesystems."},
+                                        {OPT_I, I_ALIGN, true, 0, 1,
+               "Inodes always aligned for CRC enabled filesytems."},
+                                        {OPT_I, I_PROJID32BIT, true, 0, 1,
+               "32 bit Project IDs always enabled on CRC enabled filesytems."},
+                                        {OPT_I, I_ATTR, true, 1, 1,
+               "V2 attribute format always enabled on CRC enabled 
filesytems."},
+                                        {OPT_L, L_LAZYSBCNTR, true, 0, 1,
+               "Lazy superblock counted always enabled for CRC enabled 
filesytems."},
+                                        {OPT_M, M_FINOBT, true, 1, 0,
+               "Finobt not supported without CRC support."},
+                                        {OPT_I, I_SPINODES, true, 1, 0,
+               "Sparse inodes not supported without CRC support."},
+                                        {OPT_N, N_FTYPE, true, 0, 1,
+               "Cannot disable ftype with crcs enabled."},
+                                        {LAST_CONFLICT} },
                          .minval = 0,
                          .maxval = 1,
                          .defaultval = 1,
                        },
                        { .index = M_FINOBT,
-                         .conflicts = { {LAST_CONFLICT} },
+                         .conflicts = { {OPT_M, M_CRC, true, 0, 1,
+               "Finobt not supported without CRC support."},
+                                        {LAST_CONFLICT} },
                          .minval = 0,
                          .maxval = 1,
                          .defaultval = 1,
@@ -2157,11 +2190,16 @@ _("Minimum block size for CRC enabled filesystems is %d 
bytes.\n"),
                        XFS_MIN_CRC_BLOCKSIZE);
                usage();
        }
+
+       /*
+        * If user explicitly stated -m crc=1 -n ftype=0, an error was already
+        * issued. But if -n ftype=0 was stated alone, then it is a conflict
+        * with a default value for crc enabled and has to be detected here.
+        */
        if (sb_feat.crcs_enabled && !sb_feat.dirftype) {
                fprintf(stderr, _("cannot disable ftype with crcs enabled\n"));
                usage();
        }
-
        if (!slflag && !ssflag) {
                sectorlog = XFS_MIN_SECTORSIZE_LOG;
                sectorsize = XFS_MIN_SECTORSIZE;
@@ -2267,42 +2305,6 @@ _("Minimum inode size for CRCs is %d bytes\n"),
                                1 << XFS_DINODE_DFL_CRC_LOG);
                        usage();
                }
-
-               /* inodes always aligned */
-               if (!sb_feat.inode_align) {
-                       fprintf(stderr,
-_("Inodes always aligned for CRC enabled filesytems\n"));
-                       usage();
-               }
-
-               /* lazy sb counters always on */
-               if (!sb_feat.lazy_sb_counters) {
-                       fprintf(stderr,
-_("Lazy superblock counted always enabled for CRC enabled filesytems\n"));
-                       usage();
-               }
-
-               /* version 2 logs always on */
-               if (sb_feat.log_version != 2) {
-                       fprintf(stderr,
-_("V2 logs always enabled for CRC enabled filesytems\n"));
-                       usage();
-               }
-
-               /* attr2 always on */
-               if (sb_feat.attr_version != 2) {
-                       fprintf(stderr,
-_("V2 attribute format always enabled on CRC enabled filesytems\n"));
-                       usage();
-               }
-
-               /* 32 bit project quota always on */
-               /* attr2 always on */
-               if (sb_feat.projid16bit) {
-                       fprintf(stderr,
-_("32 bit Project IDs always enabled on CRC enabled filesytems\n"));
-                       usage();
-               }
        } else {
                /*
                 * The kernel doesn't currently support crc=0,finobt=1
@@ -2310,21 +2312,10 @@ _("32 bit Project IDs always enabled on CRC enabled 
filesytems\n"));
                 * explicitly turned finobt on, then silently turn it off to
                 * avoid an unnecessary warning.
                 * If the user explicitly tried to use crc=0,finobt=1,
-                * then issue an error.
+                * the error was already issued during args parsing.
                 * The same is also for sparse inodes.
                 */
-               if (sb_feat.finobt && opts[OPT_M].subopt_params[M_FINOBT].seen) 
{
-                       fprintf(stderr,
-_("finobt not supported without CRC support\n"));
-                       usage();
-               }
                sb_feat.finobt = 0;
-
-               if (sb_feat.spinodes) {
-                       fprintf(stderr,
-_("sparse inodes not supported without CRC support\n"));
-                       usage();
-               }
                sb_feat.spinodes = 0;
 
        }
-- 
2.5.5

<Prev in Thread] Current Thread [Next in Thread>