From: Lachlan McIlroy <lachlan@sgi.com>
To: Lachlan McIlroy <lachlan@sgi.com>, xfs-dev <xfs-dev@sgi.com>,
xfs-oss <xfs@oss.sgi.com>
Subject: Re: [PATCH] Prevent log tail pushing from blocking on buffer locks
Date: Fri, 25 Jul 2008 11:32:22 +1000 [thread overview]
Message-ID: <48892D26.8060407@sgi.com> (raw)
In-Reply-To: <20080724114128.GW6761@disturbed>
Dave Chinner 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.
>
> A quick question - shouldn't the allocation use KM_NOFS if it
> being called in place that would cause recursion? Anywhere the
> inode tracing is called with a an inode lock held outside a
> transaction will also be suseptible to this deadlock.
>
> Also, there is the possibility that aborting writeback from
> the AIL in this manner could cause stalls or deadlocks
> if this item is at the of the log and it doesn't get written
> back straight away and the trigger thread then goes to sleep
> waiting for the tail to move. In that case, everything subsequent
> transaction will then go to sleep without trying to push the
> log and only the watchdog timeout on aild will get things
> moving again.
>
> So to fix a deadlock in debug code, I don't think we want to
> change the flush semantics of the AIL push on inodes for
> production code. Prevent the debug tracing code from recursing,
> instead....
I have a patch for using KM_NOFS in the debug code too and will
post it soon. It just looked like the IOP_PUSH could be improved
so that it didn't block on the buffer. Since we can already abort
the push if IOP_TRYLOCK fails I didn't think I'd be introducing any
new failure scenarios.
prev parent reply other threads:[~2008-07-25 1:25 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-22 6:32 [PATCH] Prevent log tail pushing from blocking on buffer locks Lachlan McIlroy
2008-07-23 11:21 ` Christoph Hellwig
2008-07-24 5:47 ` Lachlan McIlroy
2008-07-24 5:45 ` Christoph Hellwig
2008-07-24 11:41 ` Dave Chinner
2008-07-25 1:32 ` Lachlan McIlroy [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=48892D26.8060407@sgi.com \
--to=lachlan@sgi.com \
--cc=xfs-dev@sgi.com \
--cc=xfs@oss.sgi.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox