kn = kernfs_find_ns(parent, dentry->d_name.name, ns);
 
        /* no such entry */
-       if (!kn) {
+       if (!kn || !kernfs_active(kn)) {
                ret = NULL;
                goto out_unlock;
        }
                                break;
                }
        }
-       /* Skip over entries in the wrong namespace */
-       while (pos && pos->ns != ns) {
+       /* Skip over entries which are dying/dead or in the wrong namespace */
+       while (pos && (!kernfs_active(pos) || pos->ns != ns)) {
                struct rb_node *node = rb_next(&pos->rb);
                if (!node)
                        pos = NULL;
        struct kernfs_node *parent, ino_t ino, struct kernfs_node *pos)
 {
        pos = kernfs_dir_pos(ns, parent, ino, pos);
-       if (pos)
+       if (pos) {
                do {
                        struct rb_node *node = rb_next(&pos->rb);
                        if (!node)
                                pos = NULL;
                        else
                                pos = rb_to_kn(node);
-               } while (pos && pos->ns != ns);
+               } while (pos && (!kernfs_active(pos) || pos->ns != ns));
+       }
        return pos;
 }