[PATCH] add klist_node_attached() to determine if a node is on a list or not.
authormochel@digitalimplant.org <mochel@digitalimplant.org>
Thu, 24 Mar 2005 20:58:57 +0000 (12:58 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 20 Jun 2005 22:15:17 +0000 (15:15 -0700)
Signed-off-by: Patrick Mochel <mochel@digitalimplant.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
diff -Nru a/include/linux/klist.h b/include/linux/klist.h

include/linux/klist.h
lib/klist.c

index fb52f9d9d61105830675a99db321a88c4bd6648b..eebf5e5696ec3b31323303a354026507b54ded52 100644 (file)
@@ -37,6 +37,8 @@ extern void klist_add_head(struct klist * k, struct klist_node * n);
 extern void klist_del(struct klist_node * n);
 extern void klist_remove(struct klist_node * n);
 
+extern int klist_node_attached(struct klist_node * n);
+
 
 struct klist_iter {
        struct klist            * i_klist;
index 6f760424648bf320eef69d6baa171af0c4e31c6b..02177d72dc8923b692af454db279b8026b79c937 100644 (file)
@@ -112,6 +112,7 @@ static void klist_release(struct kref * kref)
        struct klist_node * n = container_of(kref, struct klist_node, n_ref);
        list_del(&n->n_node);
        complete(&n->n_removed);
+       n->n_klist = NULL;
 }
 
 static int klist_dec_and_del(struct klist_node * n)
@@ -153,6 +154,19 @@ void klist_remove(struct klist_node * n)
 EXPORT_SYMBOL_GPL(klist_remove);
 
 
+/**
+ *     klist_node_attached - Say whether a node is bound to a list or not.
+ *     @n:     Node that we're testing.
+ */
+
+int klist_node_attached(struct klist_node * n)
+{
+       return (n->n_klist != NULL);
+}
+
+EXPORT_SYMBOL_GPL(klist_node_attached);
+
+
 /**
  *     klist_iter_init_node - Initialize a klist_iter structure.
  *     @k:     klist we're iterating.
@@ -246,3 +260,5 @@ struct klist_node * klist_next(struct klist_iter * i)
 }
 
 EXPORT_SYMBOL_GPL(klist_next);
+
+