From b990de8ba4e2df2bc76a140799d3ddb4a0eac4ce Mon Sep 17 00:00:00 2001 From: Eric Sandeen Date: Tue, 18 Aug 2015 17:53:17 +1000 Subject: [PATCH] mkfs.xfs: fix ftype-vs-crc option combination testing mkfs.xfs got weird along the way; today it has different outcomes depending on the order of option specification: $ mkfs/mkfs.xfs -n ftype=1 -m crc=0 -dfile,name=fsfile,size=16g cannot specify both crc and ftype $ mkfs/mkfs.xfs -m crc=0 -n ftype=1 -dfile,name=fsfile,size=16g Somehow the tests got written as being constrained on what options are specified - and in what order! - vs actually testing for incompatible feature sets. It's fine to specify both crc & ftype options, as long as it's an allowed combination, so just test for the incompatible combination (crc=1 and ftype=0) after all options have been processed. [dchinner: fix dirftype init value so mkfs default config works] Signed-off-by: Eric Sandeen Reviewed-by: Brian Foster Signed-off-by: Dave Chinner --- mkfs/xfs_mkfs.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index 69d61c7da..d993fc04b 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -966,7 +966,8 @@ main( logversion = 2; logagno = logblocks = rtblocks = rtextblocks = 0; Nflag = nlflag = nsflag = nvflag = nci = 0; - nftype = dirftype = 0; /* inode type information in the dir */ + dirftype = 1; /* inode type information in the dir */ + nftype = 0; dirblocklog = dirblocksize = 0; dirversion = XFS_DFL_DIR_VERSION; qflag = 0; @@ -1477,11 +1478,6 @@ main( if (c < 0 || c > 1) illegal(value, "m crc"); crcs_enabled = c; - if (nftype && crcs_enabled) { - fprintf(stderr, -_("cannot specify both crc and ftype\n")); - usage(); - } break; case M_FINOBT: if (!value || *value == '\0') @@ -1555,11 +1551,6 @@ _("cannot specify both crc and ftype\n")); if (nftype) respec('n', nopts, N_FTYPE); dirftype = atoi(value); - if (crcs_enabled) { - fprintf(stderr, -_("cannot specify both crc and ftype\n")); - usage(); - } nftype = 1; break; default: @@ -1714,6 +1705,10 @@ _("Minimum block size for CRC enabled filesystems is %d bytes.\n"), XFS_MIN_CRC_BLOCKSIZE); usage(); } + if (crcs_enabled && !dirftype) { + fprintf(stderr, _("cannot disable ftype with crcs enabled\n")); + usage(); + } memset(&ft, 0, sizeof(ft)); get_topology(&xi, &ft, force_overwrite); -- 2.47.2