summaryrefslogtreecommitdiff
path: root/lib/klist.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/klist.c')
-rw-r--r--lib/klist.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/lib/klist.c b/lib/klist.c
index 0874e41609a6..a2741a7d9784 100644
--- a/lib/klist.c
+++ b/lib/klist.c
@@ -278,13 +278,19 @@ EXPORT_SYMBOL_GPL(klist_node_attached);
* Similar to klist_iter_init(), but starts the action off with @n,
* instead of with the list head.
*/
-void klist_iter_init_node(struct klist *k, struct klist_iter *i,
- struct klist_node *n)
+int klist_iter_init_node(struct klist *k, struct klist_iter *i,
+ struct klist_node *n)
{
+ if (n) {
+ kref_get(&n->n_ref);
+ if (!n->n_klist) {
+ kref_put(&n->n_ref);
+ return -ENODEV;
+ }
+ }
i->i_klist = k;
i->i_cur = n;
- if (n)
- kref_get(&n->n_ref);
+ return 0;
}
EXPORT_SYMBOL_GPL(klist_iter_init_node);