xfs: optimize log flushing in xfs_fsync
If we have a pinned inode it must have a log item attached to it. Usually that log item will have ili_last_lsn already set, in which case we only need to flush the log up to that LSN instead of doing a full log force. This gives speedups of about 5% in some fsync heavy workloads. 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
87185517de
commit
180040b89e
@@ -629,8 +629,14 @@ xfs_fsync(
|
|||||||
*/
|
*/
|
||||||
xfs_iunlock(ip, XFS_ILOCK_SHARED);
|
xfs_iunlock(ip, XFS_ILOCK_SHARED);
|
||||||
if (xfs_ipincount(ip)) {
|
if (xfs_ipincount(ip)) {
|
||||||
error = _xfs_log_force(ip->i_mount, XFS_LOG_SYNC,
|
if (ip->i_itemp->ili_last_lsn) {
|
||||||
&log_flushed);
|
error = _xfs_log_force_lsn(ip->i_mount,
|
||||||
|
ip->i_itemp->ili_last_lsn,
|
||||||
|
XFS_LOG_SYNC, &log_flushed);
|
||||||
|
} else {
|
||||||
|
error = _xfs_log_force(ip->i_mount,
|
||||||
|
XFS_LOG_SYNC, &log_flushed);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user