Commit d9e80b7d authored by Al Viro's avatar Al Viro Committed by Linus Torvalds
Browse files

nfs d_revalidate() is too trigger-happy with d_drop()

If dentry found stale happens to be a root of disconnected tree, we
can't d_drop() it; its d_hash is actually part of s_anon and d_drop()
would simply hide it from shrink_dcache_for_umount(), leading to
all sorts of fun, including busy inodes on umount and oopsen after

Bug had been there since at least 2006 (commit c636eb already has it),
so it's definitely -stable fodder.

Signed-off-by: default avatarAl Viro <>
Signed-off-by: default avatarLinus Torvalds <>
parent 1d16b0f2
......@@ -837,6 +837,8 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
/* If we have submounts, don't unhash ! */
if (have_submounts(dentry))
goto out_valid;
if (dentry->d_flags & DCACHE_DISCONNECTED)
goto out_valid;
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment