size_t align, unsigned long flags,
void (*ctor)(void *))
{
- memset(s, 0, kmem_size);
s->name = name;
s->ctor = ctor;
s->object_size = size;
goto error;
if (alloc_kmem_cache_cpus(s))
- return 1;
+ return 0;
free_kmem_cache_nodes(s);
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;
}
/*
{
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;
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