Blame SOURCES/xfsprogs-4.12.0-mkfs.xfs-allow-specification-of-0-data-stripe-width-.patch

cbb4b9
From 746d40a73162f942f63f6a2f612f491d107b9824 Mon Sep 17 00:00:00 2001
cbb4b9
From: Eric Sandeen <sandeen@redhat.com>
cbb4b9
Date: Thu, 20 Jul 2017 10:51:34 -0500
cbb4b9
Subject: [PATCH] mkfs.xfs: allow specification of 0 data stripe width & unit
cbb4b9
cbb4b9
The "noalign" option works for this too, but it seems reasonable
cbb4b9
to allow explicit specification of stripe unit and stripe width
cbb4b9
to 0; today, doing so today makes the code think it's unspecified,
cbb4b9
and so it goes ahead and detects stripe geometry and sets it in the
cbb4b9
superblock.  That's unexpected and surprising.
cbb4b9
cbb4b9
Create a new flag that tracks whtether a geometry option has been
cbb4b9
specified, and if it's set along with 0 values, treat it the
cbb4b9
same as if "noalign" had been specified.
cbb4b9
cbb4b9
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
cbb4b9
Reviewed-by: Christoph Hellwig <hch@lst.de>
cbb4b9
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
cbb4b9
---
cbb4b9
 mkfs/xfs_mkfs.c | 11 ++++++++++-
cbb4b9
 1 file changed, 10 insertions(+), 1 deletion(-)
cbb4b9
cbb4b9
Index: xfsprogs-rhel7.5/mkfs/xfs_mkfs.c
cbb4b9
===================================================================
cbb4b9
--- xfsprogs-rhel7.5.orig/mkfs/xfs_mkfs.c
cbb4b9
+++ xfsprogs-rhel7.5/mkfs/xfs_mkfs.c
cbb4b9
@@ -909,6 +909,7 @@ main(
cbb4b9
 	int			dsw;
cbb4b9
 	int			dsunit;
cbb4b9
 	int			dswidth;
cbb4b9
+	int			dsflag;
cbb4b9
 	int			force_overwrite;
cbb4b9
 	struct fsxattr		fsx;
cbb4b9
 	int			iaflag;
cbb4b9
@@ -1012,7 +1013,7 @@ main(
cbb4b9
 	dfile = logfile = rtfile = NULL;
cbb4b9
 	dsize = logsize = rtsize = rtextsize = protofile = NULL;
cbb4b9
 	dsu = dsw = dsunit = dswidth = lalign = lsu = lsunit = 0;
cbb4b9
-	nodsflag = norsflag = 0;
cbb4b9
+	dsflag = nodsflag = norsflag = 0;
cbb4b9
 	force_overwrite = 0;
cbb4b9
 	worst_freelist = 0;
cbb4b9
 	lazy_sb_counters = 1;
cbb4b9
@@ -1137,6 +1138,7 @@ main(
cbb4b9
 						exit(1);
cbb4b9
 					}
cbb4b9
 					dsunit = cvtnum(0, 0, value);
cbb4b9
+					dsflag = 1;
cbb4b9
 					break;
cbb4b9
 				case D_SWIDTH:
cbb4b9
 					if (!value || *value == '\0')
cbb4b9
@@ -1153,6 +1155,7 @@ main(
cbb4b9
 						exit(1);
cbb4b9
 					}
cbb4b9
 					dswidth = cvtnum(0, 0, value);
cbb4b9
+					dsflag = 1;
cbb4b9
 					break;
cbb4b9
 				case D_SU:
cbb4b9
 					if (!value || *value == '\0')
cbb4b9
@@ -1164,6 +1167,7 @@ main(
cbb4b9
 							 D_SU);
cbb4b9
 					dsu = cvtnum(
cbb4b9
 						blocksize, sectorsize, value);
cbb4b9
+					dsflag = 1;
cbb4b9
 					break;
cbb4b9
 				case D_SW:
cbb4b9
 					if (!value || *value == '\0')
cbb4b9
@@ -1180,6 +1184,7 @@ main(
cbb4b9
 						exit(1);
cbb4b9
 					}
cbb4b9
 					dsw = cvtnum(0, 0, value);
cbb4b9
+					dsflag = 1;
cbb4b9
 					break;
cbb4b9
 				case D_NOALIGN:
cbb4b9
 					if (dsu)
cbb4b9
@@ -2078,6 +2083,10 @@ _("warning: sparse inodes not supported 
cbb4b9
 	calc_stripe_factors(dsu, dsw, sectorsize, lsu, lsectorsize,
cbb4b9
 				&dsunit, &dswidth, &lsunit);
cbb4b9
 
cbb4b9
+	/* If sunit & swidth were manually specified as 0, same as noalign */
cbb4b9
+	if (dsflag && !dsunit && !dswidth)
cbb4b9
+		nodsflag = 1;
cbb4b9
+
cbb4b9
 	xi.setblksize = sectorsize;
cbb4b9
 
cbb4b9
 	/*