memcg, slab: unregister cache from memcg before starting to destroy it
[deliverable/linux.git] / mm / slab_common.c
index ccc012f001264f347d9760cacb8dc481bcf42b08..0c2879ff414c46111a68b2bcba874e475e95fd98 100644 (file)
@@ -313,9 +313,9 @@ void kmem_cache_destroy(struct kmem_cache *s)
        s->refcount--;
        if (!s->refcount) {
                list_del(&s->list);
+               memcg_unregister_cache(s);
 
                if (!__kmem_cache_shutdown(s)) {
-                       memcg_unregister_cache(s);
                        mutex_unlock(&slab_mutex);
                        if (s->flags & SLAB_DESTROY_BY_RCU)
                                rcu_barrier();
@@ -325,6 +325,7 @@ void kmem_cache_destroy(struct kmem_cache *s)
                        kmem_cache_free(kmem_cache, s);
                } else {
                        list_add(&s->list, &slab_caches);
+                       memcg_register_cache(s);
                        mutex_unlock(&slab_mutex);
                        printk(KERN_ERR "kmem_cache_destroy %s: Slab cache still has objects\n",
                                s->name);
This page took 0.040956 seconds and 5 git commands to generate.