Message ID | 20190523173742.15551-7-hch@lst.de (mailing list archive) |
---|---|
State | Superseded, archived |
Headers | show |
Series | [01/20] xfs: remove the no-op spinlock_destroy stub | expand |
On Thu, May 23, 2019 at 07:37:28PM +0200, Christoph Hellwig wrote: > If we have to split a log write because it wraps the end of the log we > can't just use REQ_PREFLUSH to flush before the first log write, > as the writes might get reordered somewhere in the I/O stack. Issue > a manual flush in that case so that the ordering of the two log I/Os > doesn't matter. > > Signed-off-by: Christoph Hellwig <hch@lst.de> Yup, we clear the flush flag from the second buffer so this is actually necessary. Very subtle, nice catch. Reviewed-by: Dave Chinner <dchinner@redhat.com>
diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index 3b82ca8ac9c8..646a190e5730 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -1941,7 +1941,7 @@ xlog_sync( * synchronously here; for an internal log we can simply use the block * layer state machine for preflushes. */ - if (log->l_mp->m_logdev_targp != log->l_mp->m_ddev_targp) + if (log->l_mp->m_logdev_targp != log->l_mp->m_ddev_targp || split) xfs_blkdev_issue_flush(log->l_mp->m_ddev_targp); else bp->b_flags |= XBF_FLUSH;
If we have to split a log write because it wraps the end of the log we can't just use REQ_PREFLUSH to flush before the first log write, as the writes might get reordered somewhere in the I/O stack. Issue a manual flush in that case so that the ordering of the two log I/Os doesn't matter. Signed-off-by: Christoph Hellwig <hch@lst.de> --- fs/xfs/xfs_log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)