Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 180040b8 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Alex Elder
Browse files

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: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAlex Elder <aelder@sgi.com>
parent 87185517
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -629,8 +629,14 @@ xfs_fsync(
		 */
		xfs_iunlock(ip, XFS_ILOCK_SHARED);
		if (xfs_ipincount(ip)) {
			error = _xfs_log_force(ip->i_mount, XFS_LOG_SYNC,
					       &log_flushed);
			if (ip->i_itemp->ili_last_lsn) {
				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	{
		/*