mm/sl[aou]b: Move kmem_cache allocations into common code
[deliverable/linux.git] / mm / slub.c
index 8d00fd78df23218c1c8979c6d3677d263eab2c98..0ad3fffc7d23ba11f1816e4401209ae8d49842b7 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -3034,7 +3034,6 @@ static int kmem_cache_open(struct kmem_cache *s,
                size_t align, unsigned long flags,
                void (*ctor)(void *))
 {
-       memset(s, 0, kmem_size);
        s->name = name;
        s->ctor = ctor;
        s->object_size = size;
@@ -3109,7 +3108,7 @@ static int kmem_cache_open(struct kmem_cache *s,
                goto error;
 
        if (alloc_kmem_cache_cpus(s))
-               return 1;
+               return 0;
 
        free_kmem_cache_nodes(s);
 error:
@@ -3118,7 +3117,7 @@ error:
                        "order=%u offset=%u flags=%lx\n",
                        s->name, (unsigned long)size, s->size, oo_order(s->oo),
                        s->offset, flags);
-       return 0;
+       return -EINVAL;
 }
 
 /*
@@ -3260,13 +3259,13 @@ static struct kmem_cache *__init create_kmalloc_cache(const char *name,
 {
        struct kmem_cache *s;
 
-       s = kmem_cache_alloc(kmem_cache, GFP_NOWAIT);
+       s = kmem_cache_zalloc(kmem_cache, GFP_NOWAIT);
 
        /*
         * This function is called with IRQs disabled during early-boot on
         * single CPU so there's no need to take slab_mutex here.
         */
-       if (!kmem_cache_open(s, name, size, ARCH_KMALLOC_MINALIGN,
+       if (kmem_cache_open(s, name, size, ARCH_KMALLOC_MINALIGN,
                                                                flags, NULL))
                goto panic;
 
@@ -3944,20 +3943,11 @@ struct kmem_cache *__kmem_cache_alias(const char *name, size_t size,
        return s;
 }
 
-struct kmem_cache *__kmem_cache_create(const char *name, size_t size,
+int __kmem_cache_create(struct kmem_cache *s,
+               const char *name, size_t size,
                size_t align, unsigned long flags, void (*ctor)(void *))
 {
-       struct kmem_cache *s;
-
-       s = kmem_cache_alloc(kmem_cache, GFP_KERNEL);
-       if (s) {
-               if (kmem_cache_open(s, name,
-                               size, align, flags, ctor)) {
-                       return s;
-               }
-               kmem_cache_free(kmem_cache, s);
-       }
-       return NULL;
+       return kmem_cache_open(s, name, size, align, flags, ctor);
 }
 
 #ifdef CONFIG_SMP
This page took 0.031385 seconds and 5 git commands to generate.