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 120bd175aa78..ebba9488046e 100644 --- a/lib/klist.c +++ b/lib/klist.c | |||
| @@ -120,6 +120,39 @@ void klist_add_tail(struct klist_node * n, struct klist * k) | |||
| 120 | EXPORT_SYMBOL_GPL(klist_add_tail); | 120 | EXPORT_SYMBOL_GPL(klist_add_tail); |
| 121 | 121 | ||
| 122 | 122 | ||
| 123 | /** | ||
| 124 | * klist_add_after - Init a klist_node and add it after an existing node | ||
| 125 | * @n: node we're adding. | ||
| 126 | * @pos: node to put @n after | ||
| 127 | */ | ||
| 128 | void klist_add_after(struct klist_node *n, struct klist_node *pos) | ||
| 129 | { | ||
| 130 | struct klist *k = pos->n_klist; | ||
| 131 | |||
| 132 | klist_node_init(k, n); | ||
| 133 | spin_lock(&k->k_lock); | ||
| 134 | list_add(&n->n_node, &pos->n_node); | ||
| 135 | spin_unlock(&k->k_lock); | ||
| 136 | } | ||
| 137 | EXPORT_SYMBOL_GPL(klist_add_after); | ||
| 138 | |||
| 139 | /** | ||
| 140 | * klist_add_before - Init a klist_node and add it before an existing node | ||
| 141 | * @n: node we're adding. | ||
| 142 | * @pos: node to put @n after | ||
| 143 | */ | ||
| 144 | void klist_add_before(struct klist_node *n, struct klist_node *pos) | ||
| 145 | { | ||
| 146 | struct klist *k = pos->n_klist; | ||
| 147 | |||
| 148 | klist_node_init(k, n); | ||
| 149 | spin_lock(&k->k_lock); | ||
| 150 | list_add_tail(&n->n_node, &pos->n_node); | ||
| 151 | spin_unlock(&k->k_lock); | ||
| 152 | } | ||
| 153 | EXPORT_SYMBOL_GPL(klist_add_before); | ||
| 154 | |||
| 155 | |||
| 123 | static void klist_release(struct kref * kref) | 156 | static void klist_release(struct kref * kref) |
| 124 | { | 157 | { |
| 125 | struct klist_node * n = container_of(kref, struct klist_node, n_ref); | 158 | struct klist_node * n = container_of(kref, struct klist_node, n_ref); |
