xfs
[Top] [All Lists]

Re: [PATCH] xfs: optimize log flushing in xfs_fsync

To: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Subject: Re: [PATCH] xfs: optimize log flushing in xfs_fsync
From: Alex Elder <aelder@xxxxxxx>
Date: Thu, 11 Feb 2010 17:10:00 -0600
Cc: xfs@xxxxxxxxxxx
In-reply-to: <20100205095755.GA30848@xxxxxxxxxxxxx>
References: <20100205095755.GA30848@xxxxxxxxxxxxx>
Reply-to: aelder@xxxxxxx
On Fri, 2010-02-05 at 04:57 -0500, Christoph Hellwig wrote:
> 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.

This looks good.  I was going to suggest:
    ASSERT(ip->i_itemp != NULL);
before it's dereferenced, but a pinned inode had better
have an item pointer...

Reviewed-by: Alex Elder <aelder@xxxxxxx>

> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> 
> Index: xfs/fs/xfs/xfs_vnodeops.c
> ===================================================================
> --- xfs.orig/fs/xfs/xfs_vnodeops.c    2010-02-04 17:38:33.679254119 +0100
> +++ xfs/fs/xfs/xfs_vnodeops.c 2010-02-04 17:38:51.606006156 +0100
> @@ -626,8 +626,14 @@ xfs_fsync(
>                * force the log.
>                */
>               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  {
>               /*
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs



<Prev in Thread] Current Thread [Next in Thread>