This is a fix for a potential deadlock in autofs4's expire routine. It tries to use dput() while holding the dcache_lock. This isn't a problem in principle since dput() should only try to take the dcache_lock when the counter makes a transition to zero, which can't happen in this case. Unfortunately the generic (and only) implementation of atomic_dec_and_lock always takes the lock, so deadlocks. Obviously, this only effects SMP. UP's wise avoidance of spinlocks saves it once again. The simple solution is simply to replace dput() with atomic_dec(). The count can't reach zero because we did a dget_locked() and held dcache_lock the whole time, so we never need to worry about the rest of the dput() logic. --- ../2.4/fs/autofs4/expire.c Wed Jan 31 00:20:50 2001 +++ fs/autofs4/expire.c Fri Apr 20 01:29:53 2001 @@ -223,7 +223,8 @@ mntput(p); return dentry; } - dput(d); + + atomic_dec(&d->d_count); /* dput(), but we'll never hit zero */ mntput(p); } spin_unlock(&dcache_lock); J