From d864f316d8d446b7289725adb1e759bfe0b47112 Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Tue, 22 Apr 2008 18:58:46 +0900 Subject: [PATCH] --- yaml --- r: 95602 b: refs/heads/master c: 93dd40013f4f7f4b18d19d0d77855f025bcc57c3 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/linux/klist.h | 2 ++ trunk/lib/klist.c | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index d501b123c109..91c3ae5bc592 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1da43e4a9ee942c9c967dbe8839476571df0c3ed +refs/heads/master: 93dd40013f4f7f4b18d19d0d77855f025bcc57c3 diff --git a/trunk/include/linux/klist.h b/trunk/include/linux/klist.h index a119c0da8977..b49385f13419 100644 --- a/trunk/include/linux/klist.h +++ b/trunk/include/linux/klist.h @@ -46,6 +46,8 @@ struct klist_node { extern void klist_add_tail(struct klist_node * n, struct klist * k); extern void klist_add_head(struct klist_node * n, struct klist * k); +extern void klist_add_after(struct klist_node *n, struct klist_node *pos); +extern void klist_add_before(struct klist_node *n, struct klist_node *pos); extern void klist_del(struct klist_node * n); extern void klist_remove(struct klist_node * n); diff --git a/trunk/lib/klist.c b/trunk/lib/klist.c index 120bd175aa78..ebba9488046e 100644 --- a/trunk/lib/klist.c +++ b/trunk/lib/klist.c @@ -120,6 +120,39 @@ void klist_add_tail(struct klist_node * n, struct klist * k) EXPORT_SYMBOL_GPL(klist_add_tail); +/** + * klist_add_after - Init a klist_node and add it after an existing node + * @n: node we're adding. + * @pos: node to put @n after + */ +void klist_add_after(struct klist_node *n, struct klist_node *pos) +{ + struct klist *k = pos->n_klist; + + klist_node_init(k, n); + spin_lock(&k->k_lock); + list_add(&n->n_node, &pos->n_node); + spin_unlock(&k->k_lock); +} +EXPORT_SYMBOL_GPL(klist_add_after); + +/** + * klist_add_before - Init a klist_node and add it before an existing node + * @n: node we're adding. + * @pos: node to put @n after + */ +void klist_add_before(struct klist_node *n, struct klist_node *pos) +{ + struct klist *k = pos->n_klist; + + klist_node_init(k, n); + spin_lock(&k->k_lock); + list_add_tail(&n->n_node, &pos->n_node); + spin_unlock(&k->k_lock); +} +EXPORT_SYMBOL_GPL(klist_add_before); + + static void klist_release(struct kref * kref) { struct klist_node * n = container_of(kref, struct klist_node, n_ref);