]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - mm/slab_common.c
drivers/scsi/cxgbi: fix build with EXTRA_CFLAGS
[karo-tx-linux.git] / mm / slab_common.c
index ab1f20e303e4eaa970224de063b4cba23893455b..d88e97c10a2e31669753681efc74f6bf50fdf2ef 100644 (file)
@@ -384,7 +384,7 @@ struct kmem_cache *
 kmem_cache_create(const char *name, size_t size, size_t align,
                  unsigned long flags, void (*ctor)(void *))
 {
-       struct kmem_cache *s;
+       struct kmem_cache *s = NULL;
        const char *cache_name;
        int err;
 
@@ -396,7 +396,6 @@ kmem_cache_create(const char *name, size_t size, size_t align,
 
        err = kmem_cache_sanity_check(name, size);
        if (err) {
-               s = NULL;       /* suppress uninit var warning */
                goto out_unlock;
        }
 
@@ -451,12 +450,8 @@ EXPORT_SYMBOL(kmem_cache_create);
 static int shutdown_cache(struct kmem_cache *s,
                struct list_head *release, bool *need_rcu_barrier)
 {
-       if (__kmem_cache_shutdown(s) != 0) {
-               printk(KERN_ERR "kmem_cache_destroy %s: "
-                      "Slab cache still has objects\n", s->name);
-               dump_stack();
+       if (__kmem_cache_shutdown(s) != 0)
                return -EBUSY;
-       }
 
        if (s->flags & SLAB_DESTROY_BY_RCU)
                *need_rcu_barrier = true;
@@ -722,8 +717,13 @@ void kmem_cache_destroy(struct kmem_cache *s)
 
        err = shutdown_memcg_caches(s, &release, &need_rcu_barrier);
        if (!err)
-               shutdown_cache(s, &release, &need_rcu_barrier);
+               err = shutdown_cache(s, &release, &need_rcu_barrier);
 
+       if (err) {
+               pr_err("kmem_cache_destroy %s: "
+                      "Slab cache still has objects\n", s->name);
+               dump_stack();
+       }
 out_unlock:
        mutex_unlock(&slab_mutex);