]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
mkfs: round log size down if rounding log start up causes overflow
authorDarrick J. Wong <djwong@kernel.org>
Wed, 18 May 2022 02:48:13 +0000 (22:48 -0400)
committerEric Sandeen <sandeen@sandeen.net>
Wed, 18 May 2022 02:48:13 +0000 (22:48 -0400)
If rounding the log start up to the next stripe unit would cause the log
to overrun the end of the AG, round the log size down by a stripe unit.
We already ensured that logblocks was small enough to fit inside the AG,
so the minor adjustment should suffice.

This can be reproduced with:
mkfs.xfs -dsu=44k,sw=1,size=300m,file,name=fsfile -m rmapbt=0
and:
mkfs.xfs -dsu=48k,sw=1,size=512m,file,name=fsfile -m rmapbt=0

Reported-by: Eric Sandeen <sandeen@sandeen.net>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
mkfs/xfs_mkfs.c

index b932acaae2f9a7d8fbf36b2d2ef535875ff4bbd2..01d2e8cadc4033cf313192b6e05d9c1ad9583532 100644 (file)
@@ -3234,6 +3234,15 @@ _("Due to stripe alignment, the internal log start (%lld) cannot be aligned\n"
        /* round up/down the log size now */
        align_log_size(cfg, sunit, max_logblocks);
 
+       /*
+        * If the end of the log has been rounded past the end of the AG,
+        * reduce logblocks by a stripe unit to try to get it back under EOAG.
+        */
+       if (!libxfs_verify_fsbext(mp, cfg->logstart, cfg->logblocks) &&
+           cfg->logblocks > sunit) {
+               cfg->logblocks -= sunit;
+       }
+
        /* check the aligned log still starts and ends in the same AG. */
        if (!libxfs_verify_fsbext(mp, cfg->logstart, cfg->logblocks)) {
                fprintf(stderr,