summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorFrank Pavlic <pavlic@de.ibm.com>2005-11-27 05:48:40 +0100
committerGreg Kroah-Hartman <gregkh@suse.de>2006-01-05 01:18:08 +0100
commite22dafbcd7a579c29a424d5203b5b33b131948a7 (patch)
tree122969a87ba706be8374beb15bc03493e3601404 /lib
parent[PATCH] Hold the device's parent's lock during probe and remove (diff)
downloadlinux-e22dafbcd7a579c29a424d5203b5b33b131948a7.tar.xz
linux-e22dafbcd7a579c29a424d5203b5b33b131948a7.zip
[PATCH] klist: Fix broken kref counting in find functions
The klist reference counting in the find functions that use klist_iter_init_node is broken. If the function (for example driver_find_device) is called with a NULL start object then everything is fine, the first call to next_device()/klist_next increases the ref-count of the first node on the list and does nothing for the start object which is NULL. If they are called with a valid start object then klist_next will decrement the ref-count for the start object but nobody has incremented it. Logical place to fix this would be klist_iter_init_node because the function puts a reference of the object into the klist_iter struct. Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Frank Pavlic <pavlic@de.ibm.com> Cc: Patrick Mochel <mochel@digitalimplant.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'lib')
-rw-r--r--lib/klist.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/lib/klist.c b/lib/klist.c
index bb2f3551d50a..9c94f0b163a1 100644
--- a/lib/klist.c
+++ b/lib/klist.c
@@ -199,6 +199,8 @@ void klist_iter_init_node(struct klist * k, struct klist_iter * i, struct klist_
i->i_klist = k;
i->i_head = &k->k_list;
i->i_cur = n;
+ if (n)
+ kref_get(&n->n_ref);
}
EXPORT_SYMBOL_GPL(klist_iter_init_node);