Re: 2.6.33.3-rt19 kernel BUG's

From: john stultz
Date: Mon May 10 2010 - 16:02:53 EST


On Mon, 2010-05-10 at 10:11 -0700, Fernando Lopez-Lezcano wrote:
> On Fri, 2010-05-07 at 17:39 -0700, john stultz wrote:
> > On Fri, 2010-05-07 at 23:58 +0000, Fernando Lopez-Lezcano wrote:
> > > On Fri, 2010-05-07 at 16:43 -0700, john stultz wrote:
> > > > On Fri, 2010-05-07 at 12:41 +0200, Thomas Gleixner wrote:
> > > > > On Thu, 6 May 2010, Fernando Lopez-Lezcano wrote:
> > > > >
> > > > > CC'ed John and Nick
> > > > >
> > > > > > See below... just trying to boot (quad core desktop machine).
> > > >
> > > > Ok. Got this to reproduce. Will hopefully have a fix for your soon.
> > > >
> > > > Thanks for the bug report!
> > >
> > > Thanks for looking at it! It had been a while since I had problems with
> > > rt so I could not understand why I could not login :-)
> >
> > Bah! I should have caught this faster. I kept thinking it had to be some
> > missed unlock of the sbi->fs_lock, but it ends up its just the
> > autofs4_lock.
> >
> > Apparently the conversion from using the dcache_lock -> autofs4_lock
> > forgot that this function already grabs the autofs_lock for a small
> > moment, so we end up grabbing the lock, then a moment later grab it
> > again. Splat.
> >
> > This patch should resolve it.
>
> I'm still having problems when trying to use autofs, even with your
> previous patch:

Oof.. More of the same autofs4_lock misuse. I skimmed over the rest of
its use, and it seems ok, so hopefully we won't hit any more problems
caused by it.

Here's both autofs4_lock changes together.

Signed-off-by: John Stultz <johnstul@xxxxxxxxxxx

diff --git a/fs/autofs4/root.c b/fs/autofs4/root.c
index 5b26088..40ca936 100644
--- a/fs/autofs4/root.c
+++ b/fs/autofs4/root.c
@@ -317,7 +317,6 @@ static void *autofs4_follow_link(struct dentry *dentry, struct nameidata *nd)
* multi-mount with no root mount offset. So don't try to
* mount it again.
*/
- spin_lock(&autofs4_lock);
spin_lock(&dentry->d_lock);
if (ino->flags & AUTOFS_INF_PENDING ||
(!d_mountpoint(dentry) && list_empty(&dentry->d_subdirs))) {
@@ -438,12 +437,10 @@ static int autofs4_revalidate(struct dentry *dentry, struct nameidata *nd)
}

/* Check for a non-mountpoint directory with no contents */
- spin_lock(&autofs4_lock);
if (S_ISDIR(dentry->d_inode->i_mode) &&
!d_mountpoint(dentry) && list_empty(&dentry->d_subdirs)) {
DPRINTK("dentry=%p %.*s, emptydir",
dentry, dentry->d_name.len, dentry->d_name.name);
- spin_unlock(&autofs4_lock);

if (autofs4_need_mount(flags) || current->link_count) {
int status;



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/