|
@@ -3140,6 +3140,7 @@ int memcg_alloc_cache_params(struct mem_cgroup *memcg, struct kmem_cache *s,
|
|
s->memcg_params->root_cache = root_cache;
|
|
s->memcg_params->root_cache = root_cache;
|
|
INIT_WORK(&s->memcg_params->destroy,
|
|
INIT_WORK(&s->memcg_params->destroy,
|
|
kmem_cache_destroy_work_func);
|
|
kmem_cache_destroy_work_func);
|
|
|
|
+ css_get(&memcg->css);
|
|
} else
|
|
} else
|
|
s->memcg_params->is_root_cache = true;
|
|
s->memcg_params->is_root_cache = true;
|
|
|
|
|
|
@@ -3148,6 +3149,10 @@ int memcg_alloc_cache_params(struct mem_cgroup *memcg, struct kmem_cache *s,
|
|
|
|
|
|
void memcg_free_cache_params(struct kmem_cache *s)
|
|
void memcg_free_cache_params(struct kmem_cache *s)
|
|
{
|
|
{
|
|
|
|
+ if (!s->memcg_params)
|
|
|
|
+ return;
|
|
|
|
+ if (!s->memcg_params->is_root_cache)
|
|
|
|
+ css_put(&s->memcg_params->memcg->css);
|
|
kfree(s->memcg_params);
|
|
kfree(s->memcg_params);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -3170,9 +3175,6 @@ void memcg_register_cache(struct kmem_cache *s)
|
|
memcg = s->memcg_params->memcg;
|
|
memcg = s->memcg_params->memcg;
|
|
id = memcg_cache_id(memcg);
|
|
id = memcg_cache_id(memcg);
|
|
|
|
|
|
- css_get(&memcg->css);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Since readers won't lock (see cache_from_memcg_idx()), we need a
|
|
* Since readers won't lock (see cache_from_memcg_idx()), we need a
|
|
* barrier here to ensure nobody will see the kmem_cache partially
|
|
* barrier here to ensure nobody will see the kmem_cache partially
|
|
@@ -3221,10 +3223,8 @@ void memcg_unregister_cache(struct kmem_cache *s)
|
|
* after removing it from the memcg_slab_caches list, otherwise we can
|
|
* after removing it from the memcg_slab_caches list, otherwise we can
|
|
* fail to convert memcg_params_to_cache() while traversing the list.
|
|
* fail to convert memcg_params_to_cache() while traversing the list.
|
|
*/
|
|
*/
|
|
- VM_BUG_ON(!root->memcg_params->memcg_caches[id]);
|
|
|
|
|
|
+ VM_BUG_ON(root->memcg_params->memcg_caches[id] != s);
|
|
root->memcg_params->memcg_caches[id] = NULL;
|
|
root->memcg_params->memcg_caches[id] = NULL;
|
|
-
|
|
|
|
- css_put(&memcg->css);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|