From: Christoph Hellwig Date: Sat, 29 Jun 2019 02:27:21 +0000 (-0700) Subject: xfs: don't use REQ_PREFLUSH for split log writes X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=1f9489be025732fa210de4e6cfd9bd4440741f74;p=openwrt%2Fstaging%2Fblogic.git xfs: don't use REQ_PREFLUSH for split log writes 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 Reviewed-by: Dave Chinner Reviewed-by: Darrick J. Wong Signed-off-by: Darrick J. Wong --- diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index 49e7f645cbc1..99509d23265f 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -1904,7 +1904,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;