|
@@ -2984,43 +2984,6 @@ int memcg_update_cache_size(struct kmem_cache *s, int num_groups)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-int memcg_alloc_cache_params(struct mem_cgroup *memcg, struct kmem_cache *s,
|
|
|
- struct kmem_cache *root_cache)
|
|
|
-{
|
|
|
- size_t size;
|
|
|
-
|
|
|
- if (!memcg_kmem_enabled())
|
|
|
- return 0;
|
|
|
-
|
|
|
- if (!memcg) {
|
|
|
- size = offsetof(struct memcg_cache_params, memcg_caches);
|
|
|
- size += memcg_limited_groups_array_size * sizeof(void *);
|
|
|
- } else
|
|
|
- size = sizeof(struct memcg_cache_params);
|
|
|
-
|
|
|
- s->memcg_params = kzalloc(size, GFP_KERNEL);
|
|
|
- if (!s->memcg_params)
|
|
|
- return -ENOMEM;
|
|
|
-
|
|
|
- if (memcg) {
|
|
|
- s->memcg_params->memcg = memcg;
|
|
|
- s->memcg_params->root_cache = root_cache;
|
|
|
- css_get(&memcg->css);
|
|
|
- } else
|
|
|
- s->memcg_params->is_root_cache = true;
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-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);
|
|
|
-}
|
|
|
-
|
|
|
static void memcg_register_cache(struct mem_cgroup *memcg,
|
|
|
struct kmem_cache *root_cache)
|
|
|
{
|
|
@@ -3051,6 +3014,7 @@ static void memcg_register_cache(struct mem_cgroup *memcg,
|
|
|
if (!cachep)
|
|
|
return;
|
|
|
|
|
|
+ css_get(&memcg->css);
|
|
|
list_add(&cachep->memcg_params->list, &memcg->memcg_slab_caches);
|
|
|
|
|
|
/*
|
|
@@ -3084,6 +3048,9 @@ static void memcg_unregister_cache(struct kmem_cache *cachep)
|
|
|
list_del(&cachep->memcg_params->list);
|
|
|
|
|
|
kmem_cache_destroy(cachep);
|
|
|
+
|
|
|
+ /* drop the reference taken in memcg_register_cache */
|
|
|
+ css_put(&memcg->css);
|
|
|
}
|
|
|
|
|
|
/*
|