aboutsummaryrefslogtreecommitdiffstats
path: root/mm/slub.c
diff options
context:
space:
mode:
authorChristoph Lameter <cl@linux.com>2012-09-04 20:18:32 -0400
committerPekka Enberg <penberg@kernel.org>2012-09-05 05:00:36 -0400
commitcbb79694d592e9a76880f6ef6db8feccaeee1c32 (patch)
tree6eb60a253bfde73214d4dc07bed860f17f737537 /mm/slub.c
parentdb265eca77000c5dafc5608975afe8dafb2a02d5 (diff)
mm/sl[aou]b: Do slab aliasing call from common code
The slab aliasing logic causes some strange contortions in slub. So add a call to deal with aliases to slab_common.c but disable it for other slab allocators by providng stubs that fail to create aliases. Full general support for aliases will require additional cleanup passes and more standardization of fields in kmem_cache. Signed-off-by: Christoph Lameter <cl@linux.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
Diffstat (limited to 'mm/slub.c')
-rw-r--r--mm/slub.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/mm/slub.c b/mm/slub.c
index 91c9a2fe6760..64d445e7a27d 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -3708,7 +3708,7 @@ void __init kmem_cache_init(void)
3708 slub_max_order = 0; 3708 slub_max_order = 0;
3709 3709
3710 kmem_size = offsetof(struct kmem_cache, node) + 3710 kmem_size = offsetof(struct kmem_cache, node) +
3711 nr_node_ids * sizeof(struct kmem_cache_node *); 3711 nr_node_ids * sizeof(struct kmem_cache_node *);
3712 3712
3713 /* Allocate two kmem_caches from the page allocator */ 3713 /* Allocate two kmem_caches from the page allocator */
3714 kmalloc_size = ALIGN(kmem_size, cache_line_size()); 3714 kmalloc_size = ALIGN(kmem_size, cache_line_size());
@@ -3922,7 +3922,7 @@ static struct kmem_cache *find_mergeable(size_t size,
3922 return NULL; 3922 return NULL;
3923} 3923}
3924 3924
3925struct kmem_cache *__kmem_cache_create(const char *name, size_t size, 3925struct kmem_cache *__kmem_cache_alias(const char *name, size_t size,
3926 size_t align, unsigned long flags, void (*ctor)(void *)) 3926 size_t align, unsigned long flags, void (*ctor)(void *))
3927{ 3927{
3928 struct kmem_cache *s; 3928 struct kmem_cache *s;
@@ -3939,11 +3939,18 @@ struct kmem_cache *__kmem_cache_create(const char *name, size_t size,
3939 3939
3940 if (sysfs_slab_alias(s, name)) { 3940 if (sysfs_slab_alias(s, name)) {
3941 s->refcount--; 3941 s->refcount--;
3942 return NULL; 3942 s = NULL;
3943 } 3943 }
3944 return s;
3945 } 3944 }
3946 3945
3946 return s;
3947}
3948
3949struct kmem_cache *__kmem_cache_create(const char *name, size_t size,
3950 size_t align, unsigned long flags, void (*ctor)(void *))
3951{
3952 struct kmem_cache *s;
3953
3947 s = kmem_cache_alloc(kmem_cache, GFP_KERNEL); 3954 s = kmem_cache_alloc(kmem_cache, GFP_KERNEL);
3948 if (s) { 3955 if (s) {
3949 if (kmem_cache_open(s, name, 3956 if (kmem_cache_open(s, name,