diff --git a/fs/namei.c b/fs/namei.c
index ae4e4c18b2ac0b2c366f893f7ffa4d898446c0f7..fbbcf0993312eb9c278dc1343ea2db0fe4edf959 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1954,8 +1954,13 @@ static int link_path_walk(const char *name, struct nameidata *nd)
 				continue;
 			}
 		}
-		if (unlikely(!d_can_lookup(nd->path.dentry)))
+		if (unlikely(!d_can_lookup(nd->path.dentry))) {
+			if (nd->flags & LOOKUP_RCU) {
+				if (unlazy_walk(nd, NULL, 0))
+					return -ECHILD;
+			}
 			return -ENOTDIR;
+		}
 	}
 }