Signed-off-by: Vladimir Davydov <vdavy...@parallels.com>
Cc: Michal Hocko <mho...@suse.cz>
Cc: Johannes Weiner <han...@cmpxchg.org>
Cc: Glauber Costa <glom...@gmail.com>
Cc: Christoph Lameter <c...@linux.com>
Cc: Pekka Enberg <penb...@kernel.org>
Cc: Andrew Morton <a...@linux-foundation.org>
---
 mm/slab_common.c |   66 +++++++++++++++++++++++++++---------------------------
 1 file changed, 33 insertions(+), 33 deletions(-)

diff --git a/mm/slab_common.c b/mm/slab_common.c
index 0b7bb39..5d6f743 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -176,8 +176,9 @@ kmem_cache_create_memcg(struct mem_cgroup *memcg, const 
char *name, size_t size,
        get_online_cpus();
        mutex_lock(&slab_mutex);
 
-       if (!kmem_cache_sanity_check(memcg, name, size) == 0)
-               goto out_locked;
+       err = kmem_cache_sanity_check(memcg, name, size);
+       if (err)
+               goto out_unlock;
 
        /*
         * Some allocators will constraint the set of valid flags to a subset
@@ -189,45 +190,41 @@ kmem_cache_create_memcg(struct mem_cgroup *memcg, const 
char *name, size_t size,
 
        s = __kmem_cache_alias(memcg, name, size, align, flags, ctor);
        if (s)
-               goto out_locked;
+               goto out_unlock;
 
        s = kmem_cache_zalloc(kmem_cache, GFP_KERNEL);
-       if (s) {
-               s->object_size = s->size = size;
-               s->align = calculate_alignment(flags, align, size);
-               s->ctor = ctor;
-
-               if (memcg_register_cache(memcg, s, parent_cache)) {
-                       kmem_cache_free(kmem_cache, s);
-                       err = -ENOMEM;
-                       goto out_locked;
-               }
+       if (!s) {
+               err = -ENOMEM;
+               goto out_unlock;
+       }
 
-               s->name = kstrdup(name, GFP_KERNEL);
-               if (!s->name) {
-                       kmem_cache_free(kmem_cache, s);
-                       err = -ENOMEM;
-                       goto out_locked;
-               }
+       s->object_size = s->size = size;
+       s->align = calculate_alignment(flags, align, size);
+       s->ctor = ctor;
 
-               err = __kmem_cache_create(s, flags);
-               if (!err) {
-                       s->refcount = 1;
-                       list_add(&s->list, &slab_caches);
-                       memcg_cache_list_add(memcg, s);
-               } else {
-                       kfree(s->name);
-                       kmem_cache_free(kmem_cache, s);
-               }
-       } else
+       s->name = kstrdup(name, GFP_KERNEL);
+       if (!s->name) {
                err = -ENOMEM;
+               goto out_free_cache;
+       }
+
+       err = memcg_register_cache(memcg, s, parent_cache);
+       if (err)
+               goto out_free_cache;
 
-out_locked:
+       err = __kmem_cache_create(s, flags);
+       if (err)
+               goto out_free_cache;
+
+       s->refcount = 1;
+       list_add(&s->list, &slab_caches);
+       memcg_cache_list_add(memcg, s);
+
+out_unlock:
        mutex_unlock(&slab_mutex);
        put_online_cpus();
 
        if (err) {
-
                if (flags & SLAB_PANIC)
                        panic("kmem_cache_create: Failed to create slab '%s'. 
Error %d\n",
                                name, err);
@@ -236,11 +233,14 @@ out_locked:
                                name, err);
                        dump_stack();
                }
-
                return NULL;
        }
-
        return s;
+
+out_free_cache:
+       kfree(s->name);
+       kmem_cache_free(kmem_cache, s);
+       goto out_unlock;
 }
 
 struct kmem_cache *
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to