From: Ingo Molnar Workaround for special sb->s_umount locking rule. s_umount gets held across a series of lock dropping and releasing in prune_one_dentry(), so i changed the order, at the risk of introducing a umount race. FIXME. I think a better fix would be to do the unlocks as _non_nested in prune_one_dentry(), and to do the up_read() here as an up_read_non_nested() as well? Signed-off-by: Ingo Molnar Signed-off-by: Arjan van de Ven Signed-off-by: Andrew Morton --- fs/dcache.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff -puN fs/dcache.c~lock-validator-special-locking-sb-s_umount fs/dcache.c --- devel/fs/dcache.c~lock-validator-special-locking-sb-s_umount 2006-05-29 18:13:29.000000000 -0700 +++ devel-akpm/fs/dcache.c 2006-05-29 18:13:29.000000000 -0700 @@ -470,8 +470,9 @@ static void prune_dcache(int count, stru s_umount = &dentry->d_sb->s_umount; if (down_read_trylock(s_umount)) { if (dentry->d_sb->s_root != NULL) { - prune_one_dentry(dentry); +// lockdep hack: do this better! up_read(s_umount); + prune_one_dentry(dentry); continue; } up_read(s_umount); _