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. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- mkfs/xfs_mkfs.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/mkfs/xfs_mkfs.c b/mkfs/xfs_mkfs.c index b932acaa..cfa38f17 100644 --- a/mkfs/xfs_mkfs.c +++ b/mkfs/xfs_mkfs.c @@ -3219,9 +3219,19 @@ align_internal_log( int max_logblocks) { /* round up log start if necessary */ - if ((cfg->logstart % sunit) != 0) + if ((cfg->logstart % sunit) != 0) { cfg->logstart = ((cfg->logstart + (sunit - 1)) / sunit) * sunit; + /* + * If rounding up logstart to a stripe boundary moves the end + * of the log past the end of the AG, reduce logblocks to get + * it back under EOAG. + */ + if (!libxfs_verify_fsbext(mp, cfg->logstart, cfg->logblocks) && + cfg->logblocks > sunit) + cfg->logblocks -= sunit; + } + /* If our log start overlaps the next AG's metadata, fail. */ if (!libxfs_verify_fsbno(mp, cfg->logstart)) { fprintf(stderr,