diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/klist.c | 14 |
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); | |||
278 | * Similar to klist_iter_init(), but starts the action off with @n, | 278 | * Similar to klist_iter_init(), but starts the action off with @n, |
279 | * instead of with the list head. | 279 | * instead of with the list head. |
280 | */ | 280 | */ |
281 | void klist_iter_init_node(struct klist *k, struct klist_iter *i, | 281 | int klist_iter_init_node(struct klist *k, struct klist_iter *i, |
282 | struct klist_node *n) | 282 | struct klist_node *n) |
283 | { | 283 | { |
284 | if (n) { | ||
285 | kref_get(&n->n_ref); | ||
286 | if (!n->n_klist) { | ||
287 | kref_put(&n->n_ref); | ||
288 | return -ENODEV; | ||
289 | } | ||
290 | } | ||
284 | i->i_klist = k; | 291 | i->i_klist = k; |
285 | i->i_cur = n; | 292 | i->i_cur = n; |
286 | if (n) | 293 | return 0; |
287 | kref_get(&n->n_ref); | ||
288 | } | 294 | } |
289 | EXPORT_SYMBOL_GPL(klist_iter_init_node); | 295 | EXPORT_SYMBOL_GPL(klist_iter_init_node); |
290 | 296 | ||