Skip to content

Commit

Permalink
xfs: avoid a few disk cache flushes
Browse files Browse the repository at this point in the history
There is no need for a pre-flush when doing writing the second part of a
split log buffer, and if we are using an external log there is no need
to do a full cache flush of the log device at all given that all writes
to it use the FUA flag.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Alex Elder <aelder@sgi.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
  • Loading branch information
Christoph Hellwig committed Jul 8, 2011
1 parent 1d5ae5d commit e163cbd
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions fs/xfs/xfs_log.c
Original file line number Diff line number Diff line change
Expand Up @@ -1371,15 +1371,21 @@ xlog_sync(xlog_t *log,
bp->b_flags |= XBF_SYNCIO;

if (log->l_mp->m_flags & XFS_MOUNT_BARRIER) {
bp->b_flags |= XBF_FUA;

/*
* 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.
* 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 stamping the new log tail LSN into the
* log buffer. For an external log we need to issue the
* flush explicitly, and unfortunately 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)
xfs_blkdev_issue_flush(log->l_mp->m_ddev_targp);
bp->b_flags |= XBF_FUA | XBF_FLUSH;
else
bp->b_flags |= XBF_FLUSH;
}

ASSERT(XFS_BUF_ADDR(bp) <= log->l_logBBsize-1);
Expand Down Expand Up @@ -1414,7 +1420,7 @@ xlog_sync(xlog_t *log,
XFS_BUF_ASYNC(bp);
bp->b_flags |= XBF_SYNCIO;
if (log->l_mp->m_flags & XFS_MOUNT_BARRIER)
bp->b_flags |= XBF_FUA | XBF_FLUSH;
bp->b_flags |= XBF_FUA;
dptr = XFS_BUF_PTR(bp);
/*
* Bump the cycle numbers at the start of each block
Expand Down

0 comments on commit e163cbd

Please sign in to comment.