diff options
author | Christoph Lameter <cl@linux.com> | 2012-09-04 20:18:32 -0400 |
---|---|---|
committer | Pekka Enberg <penberg@kernel.org> | 2012-09-05 05:00:36 -0400 |
commit | 8f4c765c22deee766319ae9a1db68325f14816e6 (patch) | |
tree | a0208ba9890f61fd02150a29b7b465b306fb62d7 /mm | |
parent | 9b030cb865f137e1574596983face2a07e41e8b2 (diff) |
mm/sl[aou]b: Move freeing of kmem_cache structure to common code
The freeing action is basically the same in all slab allocators.
Move to the common kmem_cache_destroy() function.
Reviewed-by: Glauber Costa <glommer@parallels.com>
Reviewed-by: Joonsoo Kim <js1304@gmail.com>
Signed-off-by: Christoph Lameter <cl@linux.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/slab.c | 1 | ||||
-rw-r--r-- | mm/slab_common.c | 1 | ||||
-rw-r--r-- | mm/slob.c | 2 | ||||
-rw-r--r-- | mm/slub.c | 2 |
4 files changed, 1 insertions, 5 deletions
@@ -2225,7 +2225,6 @@ void __kmem_cache_destroy(struct kmem_cache *cachep) | |||
2225 | kfree(l3); | 2225 | kfree(l3); |
2226 | } | 2226 | } |
2227 | } | 2227 | } |
2228 | kmem_cache_free(kmem_cache, cachep); | ||
2229 | } | 2228 | } |
2230 | 2229 | ||
2231 | 2230 | ||
diff --git a/mm/slab_common.c b/mm/slab_common.c index 5374150f5486..d6deae9108cd 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c | |||
@@ -154,6 +154,7 @@ void kmem_cache_destroy(struct kmem_cache *s) | |||
154 | rcu_barrier(); | 154 | rcu_barrier(); |
155 | 155 | ||
156 | __kmem_cache_destroy(s); | 156 | __kmem_cache_destroy(s); |
157 | kmem_cache_free(kmem_cache, s); | ||
157 | } else { | 158 | } else { |
158 | list_add(&s->list, &slab_caches); | 159 | list_add(&s->list, &slab_caches); |
159 | printk(KERN_ERR "kmem_cache_destroy %s: Slab cache still has objects\n", | 160 | printk(KERN_ERR "kmem_cache_destroy %s: Slab cache still has objects\n", |
@@ -540,8 +540,6 @@ struct kmem_cache *__kmem_cache_create(const char *name, size_t size, | |||
540 | 540 | ||
541 | void __kmem_cache_destroy(struct kmem_cache *c) | 541 | void __kmem_cache_destroy(struct kmem_cache *c) |
542 | { | 542 | { |
543 | kmemleak_free(c); | ||
544 | slob_free(c, sizeof(struct kmem_cache)); | ||
545 | } | 543 | } |
546 | 544 | ||
547 | void *kmem_cache_alloc_node(struct kmem_cache *c, gfp_t flags, int node) | 545 | void *kmem_cache_alloc_node(struct kmem_cache *c, gfp_t flags, int node) |
@@ -213,7 +213,6 @@ static inline int sysfs_slab_alias(struct kmem_cache *s, const char *p) | |||
213 | static inline void sysfs_slab_remove(struct kmem_cache *s) | 213 | static inline void sysfs_slab_remove(struct kmem_cache *s) |
214 | { | 214 | { |
215 | kfree(s->name); | 215 | kfree(s->name); |
216 | kmem_cache_free(kmem_cache, s); | ||
217 | } | 216 | } |
218 | 217 | ||
219 | #endif | 218 | #endif |
@@ -5206,7 +5205,6 @@ static void kmem_cache_release(struct kobject *kobj) | |||
5206 | struct kmem_cache *s = to_slab(kobj); | 5205 | struct kmem_cache *s = to_slab(kobj); |
5207 | 5206 | ||
5208 | kfree(s->name); | 5207 | kfree(s->name); |
5209 | kmem_cache_free(kmem_cache, s); | ||
5210 | } | 5208 | } |
5211 | 5209 | ||
5212 | static const struct sysfs_ops slab_sysfs_ops = { | 5210 | static const struct sysfs_ops slab_sysfs_ops = { |