mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Mike Galbraith <efault@gmx.de>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Chris Mason <chris.mason@fusionio.com>,
	"Chris L. Mason" <clmason@fusionio.com>,
	"linux-rt-users@vger.kernel.org" <linux-rt-users@vger.kernel.org>,
	LKML <linux-kernel@vger.kernel.org>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: Re: 3.4.4-rt13: btrfs + xfstests 006 = BOOM..  and a bonus rt_mutex deadlock report for absolutely free!
Date: Tue, 17 Jul 2012 14:54:17 +0200	[thread overview]
Message-ID: <1342529657.7353.104.camel@marge.simpson.net> (raw)
In-Reply-To: <1342498722.7353.37.camel@marge.simpson.net>

On Tue, 2012-07-17 at 06:18 +0200, Mike Galbraith wrote: 
> On Mon, 2012-07-16 at 13:03 -0400, Steven Rostedt wrote: 
> > On Mon, 2012-07-16 at 18:36 +0200, Mike Galbraith wrote:
> > >  
> > > > > Ouch, you just turned the rt_read_lock() into a spin lock. If a higher
> > > > > priority process preempted a lower priority process that holds the same
> > > > > lock, it will deadlock.
> > > > 
> > > > Hm, how, it's doing cpu_chill()?
> > > 
> > > 'course PI is toast, so *poof*.  Since just enabling the lockdep bits
> > > seems to fix it up, maybe that's the patchlet to submit (less is more).
> > 
> > There's that too. But the issue I was talking about is with all trylock
> > loops. As holding an rt-mutex now disables migration, if a high priority
> > process preempts a task that holds the lock, and then the high prio task
> > starts spinning waiting for that lock to release, the lower priority
> > process will never get to run to release it. The cpu_chill() doesn't
> > help.
> 
> Hrm.  I better go make a testcase, this one definitely wants pounding
> through thick skull.
> 
> I think all of the chilling in patchlet is really ugly anyway, so would
> prefer to trash it all, just enable the lockdep bits.  If it turns out
> we really do need to bounce off of counts, go get a bigger hammer when
> the need arises.  For the nonce, the pre-installed hammer _seemed_ big
> enough for the job.

All night dbench session, and all day doing many full xfstests runs
(what will run on btrfs), fsstress -p64, and generic beating says the
pre-installed tool is fine all by itself, so here comes a zero line
patch.. the second best kind ;-)

rt,fs,btrfs: fix rt deadlock on extent_buffer->lock

Trivially repeatable deadlock is cured by enabling lockdep code in
btrfs_clear_path_blocking() as suggested by Chris Mason.  He also
suggested restricting blocking reader count to one, and not allowing
a spinning reader while blocking reader exists.  This has proven to
be unnecessary, the strict lock order enforcement is enough.. or
rather that's my box's opinion after long hours of hard pounding.

Signed-off-by: Mike Galbraith <efault@gmx.de>
Cc: Chris Mason <chris.mason@fusionio.com>

diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
index 2e66786..1f71eb0 100644
--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
@@ -72,7 +72,7 @@ noinline void btrfs_clear_path_blocking(struct btrfs_path *p,
 {
 	int i;
 
-#ifdef CONFIG_DEBUG_LOCK_ALLOC
+#if (defined(CONFIG_DEBUG_LOCK_ALLOC) || defined (CONFIG_PREEMPT_RT_BASE))
 	/* lockdep really cares that we take all of these spinlocks
 	 * in the right order.  If any of the locks in the path are not
 	 * currently blocking, it is going to complain.  So, make really
@@ -89,7 +89,7 @@ noinline void btrfs_clear_path_blocking(struct btrfs_path *p,
 			btrfs_clear_lock_blocking(p->nodes[i]);
 	}
 
-#ifdef CONFIG_DEBUG_LOCK_ALLOC
+#if (defined(CONFIG_DEBUG_LOCK_ALLOC) || defined (CONFIG_PREEMPT_RT_BASE))
 	if (held)
 		btrfs_clear_lock_blocking(held);
 #endif



  parent reply	other threads:[~2012-07-17 12:54 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-12  5:47 Mike Galbraith
2012-07-12  8:44 ` Mike Galbraith
2012-07-12  9:53   ` Mike Galbraith
2012-07-12 11:43     ` Thomas Gleixner
2012-07-12 11:57       ` Mike Galbraith
2012-07-12 13:31         ` Thomas Gleixner
2012-07-12 13:37           ` Mike Galbraith
2012-07-12 13:43             ` Thomas Gleixner
2012-07-12 13:48               ` Mike Galbraith
2012-07-12 13:51                 ` Mike Galbraith
2012-07-13  6:31           ` Mike Galbraith
2012-07-13  9:52             ` Thomas Gleixner
2012-07-13 10:14               ` Mike Galbraith
2012-07-13 10:26                 ` Thomas Gleixner
2012-07-13 10:47                   ` Chris Mason
2012-07-13 12:50                     ` Mike Galbraith
2012-07-12 11:07 ` Thomas Gleixner
2012-07-12 17:09   ` Chris Mason
2012-07-13 10:04     ` Thomas Gleixner
2012-07-13 12:50 ` Chris Mason
2012-07-13 14:47   ` Thomas Gleixner
2012-07-14 10:14   ` Mike Galbraith
2012-07-15 17:56     ` Chris Mason
2012-07-16  2:02       ` Mike Galbraith
2012-07-16 16:02         ` Steven Rostedt
2012-07-16 16:26           ` Mike Galbraith
2012-07-16 16:35             ` Chris Mason
2012-07-16 16:36             ` Mike Galbraith
2012-07-16 17:03               ` Steven Rostedt
2012-07-17  4:18                 ` Mike Galbraith
2012-07-17  4:27                   ` Steven Rostedt
2012-07-17  4:34                     ` Steven Rostedt
2012-07-17  4:46                       ` Mike Galbraith
2012-07-17  4:44                     ` Mike Galbraith
2012-07-17 12:54                   ` Mike Galbraith [this message]
2012-07-16 10:55     ` Mike Galbraith
2012-07-16 15:43       ` Chris Mason
2012-07-16 16:16         ` Mike Galbraith
2012-07-14 13:38   ` Mike Galbraith

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=1342529657.7353.104.camel@marge.simpson.net \
    --to=efault@gmx.de \
    --cc=chris.mason@fusionio.com \
    --cc=clmason@fusionio.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rt-users@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /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

Powered by JetHome