diff options
-rw-r--r-- | fs/kernfs/dir.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c index f58d2f16eaf7..89f8462f337e 100644 --- a/fs/kernfs/dir.c +++ b/fs/kernfs/dir.c | |||
@@ -629,7 +629,7 @@ static struct dentry *kernfs_iop_lookup(struct inode *dir, | |||
629 | kn = kernfs_find_ns(parent, dentry->d_name.name, ns); | 629 | kn = kernfs_find_ns(parent, dentry->d_name.name, ns); |
630 | 630 | ||
631 | /* no such entry */ | 631 | /* no such entry */ |
632 | if (!kn) { | 632 | if (!kn || !kernfs_active(kn)) { |
633 | ret = NULL; | 633 | ret = NULL; |
634 | goto out_unlock; | 634 | goto out_unlock; |
635 | } | 635 | } |
@@ -1112,8 +1112,8 @@ static struct kernfs_node *kernfs_dir_pos(const void *ns, | |||
1112 | break; | 1112 | break; |
1113 | } | 1113 | } |
1114 | } | 1114 | } |
1115 | /* Skip over entries in the wrong namespace */ | 1115 | /* Skip over entries which are dying/dead or in the wrong namespace */ |
1116 | while (pos && pos->ns != ns) { | 1116 | while (pos && (!kernfs_active(pos) || pos->ns != ns)) { |
1117 | struct rb_node *node = rb_next(&pos->rb); | 1117 | struct rb_node *node = rb_next(&pos->rb); |
1118 | if (!node) | 1118 | if (!node) |
1119 | pos = NULL; | 1119 | pos = NULL; |
@@ -1127,14 +1127,15 @@ static struct kernfs_node *kernfs_dir_next_pos(const void *ns, | |||
1127 | struct kernfs_node *parent, ino_t ino, struct kernfs_node *pos) | 1127 | struct kernfs_node *parent, ino_t ino, struct kernfs_node *pos) |
1128 | { | 1128 | { |
1129 | pos = kernfs_dir_pos(ns, parent, ino, pos); | 1129 | pos = kernfs_dir_pos(ns, parent, ino, pos); |
1130 | if (pos) | 1130 | if (pos) { |
1131 | do { | 1131 | do { |
1132 | struct rb_node *node = rb_next(&pos->rb); | 1132 | struct rb_node *node = rb_next(&pos->rb); |
1133 | if (!node) | 1133 | if (!node) |
1134 | pos = NULL; | 1134 | pos = NULL; |
1135 | else | 1135 | else |
1136 | pos = rb_to_kn(node); | 1136 | pos = rb_to_kn(node); |
1137 | } while (pos && pos->ns != ns); | 1137 | } while (pos && (!kernfs_active(pos) || pos->ns != ns)); |
1138 | } | ||
1138 | return pos; | 1139 | return pos; |
1139 | } | 1140 | } |
1140 | 1141 | ||