xfs
[Top] [All Lists]

Re: [PATCH] Prevent log tail pushing from blocking on buffer locks

To: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Subject: Re: [PATCH] Prevent log tail pushing from blocking on buffer locks
From: Lachlan McIlroy <lachlan@xxxxxxx>
Date: Thu, 24 Jul 2008 15:47:52 +1000
Cc: xfs-dev <xfs-dev@xxxxxxx>, xfs-oss <xfs@xxxxxxxxxxx>
In-reply-to: <20080723112154.GA17338@xxxxxxxxxxxxx>
References: <48857EFB.3030301@xxxxxxx> <20080723112154.GA17338@xxxxxxxxxxxxx>
Reply-to: lachlan@xxxxxxx
Sender: xfs-bounce@xxxxxxxxxxx
User-agent: Thunderbird 2.0.0.14 (X11/20080421)
Christoph Hellwig wrote:
On Tue, Jul 22, 2008 at 04:32:27PM +1000, Lachlan McIlroy wrote:
This changes xfs_inode_item_push() to use XFS_IFLUSH_ASYNC_NOBLOCK when
flushing an inode so the flush wont block on inode cluster buffer lock.
Also change the prototype of the IOP_PUSH operation so that xfsaild_push()
can bump it's stuck count.

This change was prompted by a deadlock that would only occur on a debug
XFS where a thread creating an inode had the buffer locked and was trying
to allocate space for the inode tracing facility.  That recursed back into
the filesystem to flush data which created a transaction and needed log
space which wasn't available.

The stuck propagation looks good, but I don't think this should be
blindly done for all errors.  The only error where it makes sense is
the EAGAIN from xfs_iflush.  All other returns inside the item_push
handlers basically indicate filesystem corruption.

Good point.  Regardless of the error it's still an item that could not
be pushed and is effectively 'stuck'.  What do you recommend I do for
other errors?  Shutdown the filesystem?


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