diff options
Diffstat (limited to 'lib/klist.c')
-rw-r--r-- | lib/klist.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/lib/klist.c b/lib/klist.c index 120bd175aa7..ebba9488046 100644 --- a/lib/klist.c +++ b/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); |