Blame SOURCES/xfsprogs-4.13.0-mkfs.xfs-Don-t-stagger-AG-for-a-single-disk.patch

e59f31
From 9a106b5fbb88342f0ee02891d1bbb0e3c5a93d03 Mon Sep 17 00:00:00 2001
e59f31
From: Donald Douwsma <ddouwsma@redhat.com>
e59f31
Date: Fri, 15 Sep 2017 08:33:42 -0500
e59f31
Subject: [PATCH] mkfs.xfs: Don't stagger AG for a single disk
e59f31
e59f31
When sunit and swidth are used mkfs.xfs tries to avoid all allocation
e59f31
groups aligning on the same stripe and will attempt to stagger them
e59f31
across the stripes that make up swidth.  If there is only one stripe
e59f31
then there is no benefit in this optimisation.
e59f31
e59f31
$ truncate -s10G xfs_10G_su256k_sw1.image
e59f31
$ mkfs.xfs -d su=256k,sw=1 xfs_10G_su256k_sw1.image
e59f31
meta-data=xfs_10G_su256k_sw1.image isize=512    agcount=16, agsize=163776 blks
e59f31
         =                       sectsz=512   attr=2, projid32bit=1
e59f31
         =                       crc=1        finobt=0, sparse=0
e59f31
data     =                       bsize=4096   blocks=2620416, imaxpct=25
e59f31
         =                       sunit=64     swidth=64 blks
e59f31
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
e59f31
log      =internal log           bsize=4096   blocks=2560, version=2
e59f31
         =                       sectsz=512   sunit=64 blks, lazy-count=1
e59f31
realtime =none                   extsz=4096   blocks=0, rtextents=0
e59f31
e59f31
A side effect of the optimisation is that the size adjustment used to stager
e59f31
the allocation groups causes the last sunit of storage to be unused.
e59f31
e59f31
$ echo $((2620416*4096))
e59f31
10733223936
e59f31
$ ls -l xfs_10G_su256k_sw1.image
e59f31
-rw-rw-r--. 1 test test 10737418240 Aug 30 10:54 xfs_10G_su256k_sw1.image
e59f31
e59f31
Skip this optimisation when sunit == swidth.
e59f31
e59f31
Signed-off-by: Donald Douwsma <ddouwsma@redhat.com>
e59f31
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
e59f31
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
e59f31
---
e59f31
 mkfs/xfs_mkfs.c | 4 +++-
e59f31
 1 file changed, 3 insertions(+), 1 deletion(-)
e59f31
e59f31
Index: xfsprogs-rhel7.5/mkfs/xfs_mkfs.c
e59f31
===================================================================
e59f31
--- xfsprogs-rhel7.5.orig/mkfs/xfs_mkfs.c
e59f31
+++ xfsprogs-rhel7.5/mkfs/xfs_mkfs.c
e59f31
@@ -2308,7 +2308,9 @@ reported by the device (%u).\n"),
e59f31
 				}
e59f31
 			}
e59f31
 		}
e59f31
-		if (dswidth && ((agsize % dswidth) == 0) && (agcount > 1)) {
e59f31
+		if (dswidth && ((agsize % dswidth) == 0)
e59f31
+			    && (dswidth != dsunit)
e59f31
+			    && (agcount > 1)) {
e59f31
 			/* This is a non-optimal configuration because all AGs
e59f31
 			 * start on the same disk in the stripe.  Changing
e59f31
 			 * the AG size by one sunit will guarantee that this