diff options
-rw-r--r-- | mm/memcontrol.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 4c31a21a55be..80175ded718d 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -3242,7 +3242,7 @@ void memcg_release_cache(struct kmem_cache *s) | |||
3242 | list_del(&s->memcg_params->list); | 3242 | list_del(&s->memcg_params->list); |
3243 | mutex_unlock(&memcg->slab_caches_mutex); | 3243 | mutex_unlock(&memcg->slab_caches_mutex); |
3244 | 3244 | ||
3245 | mem_cgroup_put(memcg); | 3245 | css_put(&memcg->css); |
3246 | out: | 3246 | out: |
3247 | kfree(s->memcg_params); | 3247 | kfree(s->memcg_params); |
3248 | } | 3248 | } |
@@ -3402,16 +3402,18 @@ static struct kmem_cache *memcg_create_kmem_cache(struct mem_cgroup *memcg, | |||
3402 | 3402 | ||
3403 | mutex_lock(&memcg_cache_mutex); | 3403 | mutex_lock(&memcg_cache_mutex); |
3404 | new_cachep = cachep->memcg_params->memcg_caches[idx]; | 3404 | new_cachep = cachep->memcg_params->memcg_caches[idx]; |
3405 | if (new_cachep) | 3405 | if (new_cachep) { |
3406 | css_put(&memcg->css); | ||
3406 | goto out; | 3407 | goto out; |
3408 | } | ||
3407 | 3409 | ||
3408 | new_cachep = kmem_cache_dup(memcg, cachep); | 3410 | new_cachep = kmem_cache_dup(memcg, cachep); |
3409 | if (new_cachep == NULL) { | 3411 | if (new_cachep == NULL) { |
3410 | new_cachep = cachep; | 3412 | new_cachep = cachep; |
3413 | css_put(&memcg->css); | ||
3411 | goto out; | 3414 | goto out; |
3412 | } | 3415 | } |
3413 | 3416 | ||
3414 | mem_cgroup_get(memcg); | ||
3415 | atomic_set(&new_cachep->memcg_params->nr_pages , 0); | 3417 | atomic_set(&new_cachep->memcg_params->nr_pages , 0); |
3416 | 3418 | ||
3417 | cachep->memcg_params->memcg_caches[idx] = new_cachep; | 3419 | cachep->memcg_params->memcg_caches[idx] = new_cachep; |
@@ -3499,8 +3501,6 @@ static void memcg_create_cache_work_func(struct work_struct *w) | |||
3499 | 3501 | ||
3500 | cw = container_of(w, struct create_work, work); | 3502 | cw = container_of(w, struct create_work, work); |
3501 | memcg_create_kmem_cache(cw->memcg, cw->cachep); | 3503 | memcg_create_kmem_cache(cw->memcg, cw->cachep); |
3502 | /* Drop the reference gotten when we enqueued. */ | ||
3503 | css_put(&cw->memcg->css); | ||
3504 | kfree(cw); | 3504 | kfree(cw); |
3505 | } | 3505 | } |
3506 | 3506 | ||