Re: Locking problem in autofs4_expire(), 2.4.0-test10

From: Nigel Gamble (nigel@mvista.com)
Date: Sun Nov 05 2000 - 19:34:56 EST


On Fri, 3 Nov 2000, Nigel Gamble wrote:
>
> dput() is called with dcache_lock already held, resulting in deadlock.
>
> Here is a suggested fix:
>
> ===== expire.c 1.3 vs edited =====
> --- 1.3/linux/fs/autofs4/expire.c Tue Oct 31 15:14:06 2000
> +++ edited/expire.c Fri Nov 3 17:47:47 2000
> @@ -223,8 +223,10 @@
> mntput(p);
> return dentry;
> }
> + spin_unlock(&dcache_lock);
> dput(d);
> mntput(p);
> + spin_lock(&dcache_lock);
> }
> spin_unlock(&dcache_lock);

On looking at this code more closely, I don't think it's safe just
to drop the lock, because it looks like the lock is supposed to
protect the loop variable, tmp, and the data structure which
is being traversed. However, I'm not familiar with this code,
so I'm hoping someone who is can come up with a correct solution
to this deadlock problem.

Nigel

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



This archive was generated by hypermail 2b29 : Tue Nov 07 2000 - 21:00:18 EST