Message ID | 20170315160017.27805-9-jtulak@redhat.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On 3/15/17 9:00 AM, Jan Tulak wrote: > @@ -564,7 +575,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, Ah, and I know this is just a copy from elsewhere, but this string has a typo; it should be "Lazy superblock counters always enabled ..." so this might be a decent time to fix it. -Eric -- 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
On 3/15/17 9:00 AM, Jan Tulak wrote: > @@ -640,7 +655,9 @@ struct opt_params { > .defaultval = SUBOPT_NEEDS_VAL, > }, > { .index = R_DEV, > - .conflicts = { {LAST_CONFLICT} }, > + .conflicts = { {OPT_M, M_RMAPBT, false, 0, 0, > + "rmapbt not supported without CRC support."}, > + {LAST_CONFLICT} }, > .defaultval = SUBOPT_NEEDS_VAL, > }, > { .index = R_FILE, > @@ -650,7 +667,9 @@ struct opt_params { > .conflicts = { {LAST_CONFLICT} }, > }, > { .index = R_NAME, > - .conflicts = { {LAST_CONFLICT} }, > + .conflicts = { {OPT_M, M_RMAPBT, false, 0, 0, > + "rmapbt not supported without CRC support."}, > + {LAST_CONFLICT} }, > .defaultval = SUBOPT_NEEDS_VAL, > }, > { .index = R_NOALIGN, These two should be: "rmapbt not supported with realtime devices." I think. (sorry for the scattershot review, I'll try to get organized going forward) ;) -Eric -- 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
On Thu, Mar 16, 2017 at 11:39:11AM -0700, Eric Sandeen wrote: > On 3/15/17 9:00 AM, Jan Tulak wrote: > > @@ -640,7 +655,9 @@ struct opt_params { > > .defaultval = SUBOPT_NEEDS_VAL, > > }, > > { .index = R_DEV, > > - .conflicts = { {LAST_CONFLICT} }, > > + .conflicts = { {OPT_M, M_RMAPBT, false, 0, 0, > > + "rmapbt not supported without CRC support."}, > > + {LAST_CONFLICT} }, > > .defaultval = SUBOPT_NEEDS_VAL, > > }, > > { .index = R_FILE, > > @@ -650,7 +667,9 @@ struct opt_params { > > .conflicts = { {LAST_CONFLICT} }, > > }, > > { .index = R_NAME, > > - .conflicts = { {LAST_CONFLICT} }, > > + .conflicts = { {OPT_M, M_RMAPBT, false, 0, 0, > > + "rmapbt not supported without CRC support."}, > > + {LAST_CONFLICT} }, > > .defaultval = SUBOPT_NEEDS_VAL, > > }, > > { .index = R_NOALIGN, > > These two should be: > > "rmapbt not supported with realtime devices." > > I think. Yes, rmapbt isn't supported with realtime devices yet. FWIW we ought to lock out realtime+reflink for the time being too. At one point I had a prototype for reflink on the rtdev but it bitrotted and died when the iomap rework came along. I'll get back to it some day, but first I need to reduce the number of out of tree patches in djwong-wtf. :) --D > > (sorry for the scattershot review, I'll try to get organized going forward) ;) > > -Eric > -- > 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
On 3/15/17 11:00 AM, Jan Tulak wrote: > Fill the table with conflicts data and remove now-duplicate code for their > detection from other parts of mkfs. One other thing that I've noticed is that if you do: # mkfs.xfs -i align=0 /dev/foo that passes now, and it shouldn't. Prior to this patch, it said: Inodes always aligned for CRC enabled filesytems The above testcase actually alternates between pass & fail over the next several patches. If you have testcases for these conflicts, please try to make sure that they don't regress throughout the series. -Eric > Signed-off-by: Jan Tulak <jtulak@redhat.com> > --- > mkfs/xfs_mkfs.c | 152 ++++++++++++++++++++++++++------------------------------ > 1 file changed, 70 insertions(+), 82 deletions(-) > > diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c > index 4ba6df05..c100fef9 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 > @@ -409,7 +409,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, > @@ -447,19 +449,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, > @@ -508,7 +517,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, > @@ -564,7 +575,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, > @@ -605,7 +618,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, > @@ -640,7 +655,9 @@ struct opt_params { > .defaultval = SUBOPT_NEEDS_VAL, > }, > { .index = R_DEV, > - .conflicts = { {LAST_CONFLICT} }, > + .conflicts = { {OPT_M, M_RMAPBT, false, 0, 0, > + "rmapbt not supported without CRC support."}, > + {LAST_CONFLICT} }, > .defaultval = SUBOPT_NEEDS_VAL, > }, > { .index = R_FILE, > @@ -650,7 +667,9 @@ struct opt_params { > .conflicts = { {LAST_CONFLICT} }, > }, > { .index = R_NAME, > - .conflicts = { {LAST_CONFLICT} }, > + .conflicts = { {OPT_M, M_RMAPBT, false, 0, 0, > + "rmapbt not supported without CRC support."}, > + {LAST_CONFLICT} }, > .defaultval = SUBOPT_NEEDS_VAL, > }, > { .index = R_NOALIGN, > @@ -723,13 +742,35 @@ 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_M, M_RMAPBT, true, 1, 0, > + "rmapbt not supported without CRC support."}, > + {OPT_M, M_REFLINK, true, 1, 0, > + "reflink 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\n"}, > + {LAST_CONFLICT} }, > .minval = 0, > .maxval = 1, > .defaultval = 1, > @@ -739,13 +780,21 @@ struct opt_params { > .defaultval = SUBOPT_NEEDS_VAL, > }, > { .index = M_RMAPBT, > - .conflicts = { {LAST_CONFLICT} }, > + .conflicts = { {OPT_M, M_CRC, true, 0, 1, > + "rmapbt not supported without CRC support."}, > + {OPT_R, R_NAME, false, 0, 0, > + "rmapbt not supported with realtime devices."}, > + {OPT_R, R_DEV, false, 0, 0, > + "rmapbt not supported with realtime devices."}, > + {LAST_CONFLICT} }, > .minval = 0, > .maxval = 1, > .defaultval = 0, > }, > { .index = M_REFLINK, > - .conflicts = { {LAST_CONFLICT} }, > + .conflicts = { {OPT_M, M_CRC, true, 0, 1, > + "reflink not supported without CRC support."}, > + {LAST_CONFLICT} }, > .minval = 0, > .maxval = 1, > .defaultval = 0, > @@ -2183,11 +2232,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; > @@ -2293,42 +2347,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 > @@ -2336,46 +2354,16 @@ _("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; > > - if (sb_feat.rmapbt) { > - fprintf(stderr, > -_("rmapbt not supported without CRC support\n")); > - usage(); > - } > sb_feat.rmapbt = false; > - > - if (sb_feat.reflink) { > - fprintf(stderr, > -_("reflink not supported without CRC support\n")); > - usage(); > - } > sb_feat.reflink = false; > } > > - > - if (sb_feat.rmapbt && xi.rtname) { > - fprintf(stderr, > -_("rmapbt not supported with realtime devices\n")); > - usage(); > - sb_feat.rmapbt = false; > - } > - > if (nsflag || nlflag) { > if (dirblocksize < blocksize || > dirblocksize > XFS_MAX_BLOCKSIZE) { > -- 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
On Sat, Mar 25, 2017 at 12:53 AM, Eric Sandeen <sandeen@sandeen.net> wrote: > On 3/15/17 11:00 AM, Jan Tulak wrote: >> Fill the table with conflicts data and remove now-duplicate code for their >> detection from other parts of mkfs. > > One other thing that I've noticed is that if you do: > > # mkfs.xfs -i align=0 /dev/foo > > that passes now, and it shouldn't. Prior to this patch, it said: > > Inodes always aligned for CRC enabled filesytems > > The above testcase actually alternates between pass & fail over > the next several patches. If you have testcases for these conflicts, > please try to make sure that they don't regress throughout the > series. I'll fix it. Thanks, Jan > > -Eric > >> Signed-off-by: Jan Tulak <jtulak@redhat.com> >> --- >> mkfs/xfs_mkfs.c | 152 ++++++++++++++++++++++++++------------------------------ >> 1 file changed, 70 insertions(+), 82 deletions(-) >> >> diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c >> index 4ba6df05..c100fef9 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 >> @@ -409,7 +409,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, >> @@ -447,19 +449,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, >> @@ -508,7 +517,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, >> @@ -564,7 +575,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, >> @@ -605,7 +618,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, >> @@ -640,7 +655,9 @@ struct opt_params { >> .defaultval = SUBOPT_NEEDS_VAL, >> }, >> { .index = R_DEV, >> - .conflicts = { {LAST_CONFLICT} }, >> + .conflicts = { {OPT_M, M_RMAPBT, false, 0, 0, >> + "rmapbt not supported without CRC support."}, >> + {LAST_CONFLICT} }, >> .defaultval = SUBOPT_NEEDS_VAL, >> }, >> { .index = R_FILE, >> @@ -650,7 +667,9 @@ struct opt_params { >> .conflicts = { {LAST_CONFLICT} }, >> }, >> { .index = R_NAME, >> - .conflicts = { {LAST_CONFLICT} }, >> + .conflicts = { {OPT_M, M_RMAPBT, false, 0, 0, >> + "rmapbt not supported without CRC support."}, >> + {LAST_CONFLICT} }, >> .defaultval = SUBOPT_NEEDS_VAL, >> }, >> { .index = R_NOALIGN, >> @@ -723,13 +742,35 @@ 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_M, M_RMAPBT, true, 1, 0, >> + "rmapbt not supported without CRC support."}, >> + {OPT_M, M_REFLINK, true, 1, 0, >> + "reflink 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\n"}, >> + {LAST_CONFLICT} }, >> .minval = 0, >> .maxval = 1, >> .defaultval = 1, >> @@ -739,13 +780,21 @@ struct opt_params { >> .defaultval = SUBOPT_NEEDS_VAL, >> }, >> { .index = M_RMAPBT, >> - .conflicts = { {LAST_CONFLICT} }, >> + .conflicts = { {OPT_M, M_CRC, true, 0, 1, >> + "rmapbt not supported without CRC support."}, >> + {OPT_R, R_NAME, false, 0, 0, >> + "rmapbt not supported with realtime devices."}, >> + {OPT_R, R_DEV, false, 0, 0, >> + "rmapbt not supported with realtime devices."}, >> + {LAST_CONFLICT} }, >> .minval = 0, >> .maxval = 1, >> .defaultval = 0, >> }, >> { .index = M_REFLINK, >> - .conflicts = { {LAST_CONFLICT} }, >> + .conflicts = { {OPT_M, M_CRC, true, 0, 1, >> + "reflink not supported without CRC support."}, >> + {LAST_CONFLICT} }, >> .minval = 0, >> .maxval = 1, >> .defaultval = 0, >> @@ -2183,11 +2232,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; >> @@ -2293,42 +2347,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 >> @@ -2336,46 +2354,16 @@ _("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; >> >> - if (sb_feat.rmapbt) { >> - fprintf(stderr, >> -_("rmapbt not supported without CRC support\n")); >> - usage(); >> - } >> sb_feat.rmapbt = false; >> - >> - if (sb_feat.reflink) { >> - fprintf(stderr, >> -_("reflink not supported without CRC support\n")); >> - usage(); >> - } >> sb_feat.reflink = false; >> } >> >> - >> - if (sb_feat.rmapbt && xi.rtname) { >> - fprintf(stderr, >> -_("rmapbt not supported with realtime devices\n")); >> - usage(); >> - sb_feat.rmapbt = false; >> - } >> - >> if (nsflag || nlflag) { >> if (dirblocksize < blocksize || >> dirblocksize > XFS_MAX_BLOCKSIZE) { >> > -- > 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 --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 4ba6df05..c100fef9 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 @@ -409,7 +409,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, @@ -447,19 +449,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, @@ -508,7 +517,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, @@ -564,7 +575,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, @@ -605,7 +618,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, @@ -640,7 +655,9 @@ struct opt_params { .defaultval = SUBOPT_NEEDS_VAL, }, { .index = R_DEV, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_M, M_RMAPBT, false, 0, 0, + "rmapbt not supported without CRC support."}, + {LAST_CONFLICT} }, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = R_FILE, @@ -650,7 +667,9 @@ struct opt_params { .conflicts = { {LAST_CONFLICT} }, }, { .index = R_NAME, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_M, M_RMAPBT, false, 0, 0, + "rmapbt not supported without CRC support."}, + {LAST_CONFLICT} }, .defaultval = SUBOPT_NEEDS_VAL, }, { .index = R_NOALIGN, @@ -723,13 +742,35 @@ 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_M, M_RMAPBT, true, 1, 0, + "rmapbt not supported without CRC support."}, + {OPT_M, M_REFLINK, true, 1, 0, + "reflink 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\n"}, + {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 1, @@ -739,13 +780,21 @@ struct opt_params { .defaultval = SUBOPT_NEEDS_VAL, }, { .index = M_RMAPBT, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_M, M_CRC, true, 0, 1, + "rmapbt not supported without CRC support."}, + {OPT_R, R_NAME, false, 0, 0, + "rmapbt not supported with realtime devices."}, + {OPT_R, R_DEV, false, 0, 0, + "rmapbt not supported with realtime devices."}, + {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 0, }, { .index = M_REFLINK, - .conflicts = { {LAST_CONFLICT} }, + .conflicts = { {OPT_M, M_CRC, true, 0, 1, + "reflink not supported without CRC support."}, + {LAST_CONFLICT} }, .minval = 0, .maxval = 1, .defaultval = 0, @@ -2183,11 +2232,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; @@ -2293,42 +2347,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 @@ -2336,46 +2354,16 @@ _("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; - if (sb_feat.rmapbt) { - fprintf(stderr, -_("rmapbt not supported without CRC support\n")); - usage(); - } sb_feat.rmapbt = false; - - if (sb_feat.reflink) { - fprintf(stderr, -_("reflink not supported without CRC support\n")); - usage(); - } sb_feat.reflink = false; } - - if (sb_feat.rmapbt && xi.rtname) { - fprintf(stderr, -_("rmapbt not supported with realtime devices\n")); - usage(); - sb_feat.rmapbt = false; - } - if (nsflag || nlflag) { if (dirblocksize < blocksize || dirblocksize > XFS_MAX_BLOCKSIZE) {
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@redhat.com> --- mkfs/xfs_mkfs.c | 152 ++++++++++++++++++++++++++------------------------------ 1 file changed, 70 insertions(+), 82 deletions(-)