xfs: make log devices with write back caches work
There's no reason not to support cache flushing on external log devices. The only thing this really requires is flushing the data device first both in fsync and log commits. A side effect is that we also have to remove the barrier write test during mount, which has been superflous since the new FLUSH+FUA code anyway. Also use the chance to flush the RT subvolume write cache before the fsync commit, which is required for correct semantics. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Alex Elder <aelder@sgi.com>
This commit is contained in:
committed by
Alex Elder
parent
c46a131c0c
commit
a27a263bae
@@ -1372,8 +1372,17 @@ xlog_sync(xlog_t *log,
|
||||
XFS_BUF_ASYNC(bp);
|
||||
bp->b_flags |= XBF_LOG_BUFFER;
|
||||
|
||||
if (log->l_mp->m_flags & XFS_MOUNT_BARRIER)
|
||||
if (log->l_mp->m_flags & XFS_MOUNT_BARRIER) {
|
||||
/*
|
||||
* If we have an external log device, flush the data device
|
||||
* before flushing the log to make sure all meta data
|
||||
* written back from the AIL actually made it to disk
|
||||
* before writing out the new log tail LSN in the log buffer.
|
||||
*/
|
||||
if (log->l_mp->m_logdev_targp != log->l_mp->m_ddev_targp)
|
||||
xfs_blkdev_issue_flush(log->l_mp->m_ddev_targp);
|
||||
XFS_BUF_ORDERED(bp);
|
||||
}
|
||||
|
||||
ASSERT(XFS_BUF_ADDR(bp) <= log->l_logBBsize-1);
|
||||
ASSERT(XFS_BUF_ADDR(bp) + BTOBB(count) <= log->l_logBBsize);
|
||||
|
Reference in New Issue
Block a user