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>
/* 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,