diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index dd028a12a4..4f48903b8f 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -2639,11 +2639,20 @@ XLogSetAsyncXactLSN(XLogRecPtr asyncXactLSN) */ if (!sleeping) { + int flushbytes; + /* back off to last completed page boundary */ WriteRqstPtr -= WriteRqstPtr % XLOG_BLCKSZ; - /* if we have already flushed that far, we're done */ - if (WriteRqstPtr <= LogwrtResult.Flush) + flushbytes = + WriteRqstPtr / XLOG_BLCKSZ - LogwrtResult.Flush / XLOG_BLCKSZ; + + /* + * if there is nothing to write and we don't have enough to flush, + * we're done + */ + if (WriteRqstPtr <= LogwrtResult.Write + && (WalWriterFlushAfter == 0 || flushbytes < WalWriterFlushAfter)) return; }