From: Darrick J. Wong <djwong@xxxxxxxxxx> 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@xxxxxxxxxxx> Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- mkfs/xfs_mkfs.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index b932acaa..01d2e8ca 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,