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

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