|
 |
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 |
/*
|