diff options
author | Christoph Lameter <cl@linux.com> | 2012-09-04 19:18:33 -0400 |
---|---|---|
committer | Pekka Enberg <penberg@kernel.org> | 2012-09-05 05:00:35 -0400 |
commit | 945cf2b6199be70ff03102b9e642c3bb05d01de9 (patch) | |
tree | b0deef56b1d79af1054f0cf1bd91c6fb00ce31a5 /mm/slab_common.c | |
parent | 7c9adf5a5471647f392169ef19d3e81dcfa76045 (diff) |
mm/sl[aou]b: Extract a common function for kmem_cache_destroy
kmem_cache_destroy does basically the same in all allocators.
Extract common code which is easy since we already have common mutex
handling.
Reviewed-by: Glauber Costa <glommer@parallels.com>
Signed-off-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
Diffstat (limited to 'mm/slab_common.c')
-rw-r--r-- | mm/slab_common.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/mm/slab_common.c b/mm/slab_common.c index 5190a7cd02bd..a1c4f0b5aaed 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c | |||
@@ -140,6 +140,31 @@ out_locked: | |||
140 | } | 140 | } |
141 | EXPORT_SYMBOL(kmem_cache_create); | 141 | EXPORT_SYMBOL(kmem_cache_create); |
142 | 142 | ||
143 | void kmem_cache_destroy(struct kmem_cache *s) | ||
144 | { | ||
145 | get_online_cpus(); | ||
146 | mutex_lock(&slab_mutex); | ||
147 | s->refcount--; | ||
148 | if (!s->refcount) { | ||
149 | list_del(&s->list); | ||
150 | |||
151 | if (!__kmem_cache_shutdown(s)) { | ||
152 | if (s->flags & SLAB_DESTROY_BY_RCU) | ||
153 | rcu_barrier(); | ||
154 | |||
155 | __kmem_cache_destroy(s); | ||
156 | } else { | ||
157 | list_add(&s->list, &slab_caches); | ||
158 | printk(KERN_ERR "kmem_cache_destroy %s: Slab cache still has objects\n", | ||
159 | s->name); | ||
160 | dump_stack(); | ||
161 | } | ||
162 | } | ||
163 | mutex_unlock(&slab_mutex); | ||
164 | put_online_cpus(); | ||
165 | } | ||
166 | EXPORT_SYMBOL(kmem_cache_destroy); | ||
167 | |||
143 | int slab_is_available(void) | 168 | int slab_is_available(void) |
144 | { | 169 | { |
145 | return slab_state >= UP; | 170 | return slab_state >= UP; |