xfs
[Top] [All Lists]

Re: [PATCH] fix inode allocation latency

To: David Chinner <dgc@xxxxxxx>
Subject: Re: [PATCH] fix inode allocation latency
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Tue, 30 Oct 2007 12:41:55 +0000
Cc: xfs@xxxxxxxxxxx, xfs-dev@xxxxxxx
In-reply-to: <20071029233742.GS995458@sgi.com>
References: <20071029233742.GS995458@sgi.com>
Sender: xfs-bounce@xxxxxxxxxxx
User-agent: Mutt/1.4.2.3i
On Tue, Oct 30, 2007 at 10:37:42AM +1100, David Chinner wrote:
> The log force added in xfs_iget_core() has been a performance
> issue since it was introduced for tight loops that allocate
> then unlink a single file. under heavy writeback, this can
> introduce unnecessary latency due tothe log I/o getting
> stuck behind bulk data writes.
> 
> Fix this latency problem by avoinding the need for the log
> force by moving the place we mark linux inode dirty to the
> transaction commit rather than on transaction completion.
> 
> This also closes a potential hole in the sync code where a
> linux inode is not dirty betwen the time it is modified and
> the time the log buffer has been written to disk.

The concept sounds fine to me, and the implementation looks good
aswell.

>  /*
> + * If the linux inode exists, mark it dirty.
> + * Used when commiting a dirty inode into a transaction so that
> + * the inode will get written back by the linux code
> + */
> +void
> +xfs_mark_inode_dirty_sync(
> +     xfs_inode_t     *ip)
> +{
> +     bhv_vnode_t     *vp;
> +
> +     vp = XFS_ITOV_NULL(ip);
> +     if (vp)
> +             mark_inode_dirty_sync(vn_to_inode(vp));
> +}

I think this should be:

void
xfs_mark_inode_dirty_sync(
        xfs_inode_t     *ip)
{
        if (ip->i_vnode)
                mark_inode_dirty_sync(ip->i_vnode);
}


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