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.