From 0da883ddf2a85ac26dcc4ccd558c318ced17d7d0 Mon Sep 17 00:00:00 2001 From: "Darrick J. Wong" Date: Tue, 17 May 2022 22:48:13 -0400 Subject: [PATCH] mkfs: round log size down if rounding log start up causes overflow 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 Signed-off-by: Darrick J. Wong Reviewed-by: Christoph Hellwig Signed-off-by: Eric Sandeen --- mkfs/xfs_mkfs.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index b932acaae..01d2e8cad 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -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, -- 2.47.2