diff options
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r-- | mm/memcontrol.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 53b8201b31eb..2b552224f5cf 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -3012,6 +3012,8 @@ void memcg_update_array_size(int num) | |||
3012 | memcg_limited_groups_array_size = memcg_caches_array_size(num); | 3012 | memcg_limited_groups_array_size = memcg_caches_array_size(num); |
3013 | } | 3013 | } |
3014 | 3014 | ||
3015 | static void kmem_cache_destroy_work_func(struct work_struct *w); | ||
3016 | |||
3015 | int memcg_update_cache_size(struct kmem_cache *s, int num_groups) | 3017 | int memcg_update_cache_size(struct kmem_cache *s, int num_groups) |
3016 | { | 3018 | { |
3017 | struct memcg_cache_params *cur_params = s->memcg_params; | 3019 | struct memcg_cache_params *cur_params = s->memcg_params; |
@@ -3031,6 +3033,8 @@ int memcg_update_cache_size(struct kmem_cache *s, int num_groups) | |||
3031 | return -ENOMEM; | 3033 | return -ENOMEM; |
3032 | } | 3034 | } |
3033 | 3035 | ||
3036 | INIT_WORK(&s->memcg_params->destroy, | ||
3037 | kmem_cache_destroy_work_func); | ||
3034 | s->memcg_params->is_root_cache = true; | 3038 | s->memcg_params->is_root_cache = true; |
3035 | 3039 | ||
3036 | /* | 3040 | /* |
@@ -3078,6 +3082,8 @@ int memcg_register_cache(struct mem_cgroup *memcg, struct kmem_cache *s, | |||
3078 | if (!s->memcg_params) | 3082 | if (!s->memcg_params) |
3079 | return -ENOMEM; | 3083 | return -ENOMEM; |
3080 | 3084 | ||
3085 | INIT_WORK(&s->memcg_params->destroy, | ||
3086 | kmem_cache_destroy_work_func); | ||
3081 | if (memcg) { | 3087 | if (memcg) { |
3082 | s->memcg_params->memcg = memcg; | 3088 | s->memcg_params->memcg = memcg; |
3083 | s->memcg_params->root_cache = root_cache; | 3089 | s->memcg_params->root_cache = root_cache; |
@@ -3358,8 +3364,6 @@ static void mem_cgroup_destroy_all_caches(struct mem_cgroup *memcg) | |||
3358 | list_for_each_entry(params, &memcg->memcg_slab_caches, list) { | 3364 | list_for_each_entry(params, &memcg->memcg_slab_caches, list) { |
3359 | cachep = memcg_params_to_cache(params); | 3365 | cachep = memcg_params_to_cache(params); |
3360 | cachep->memcg_params->dead = true; | 3366 | cachep->memcg_params->dead = true; |
3361 | INIT_WORK(&cachep->memcg_params->destroy, | ||
3362 | kmem_cache_destroy_work_func); | ||
3363 | schedule_work(&cachep->memcg_params->destroy); | 3367 | schedule_work(&cachep->memcg_params->destroy); |
3364 | } | 3368 | } |
3365 | mutex_unlock(&memcg->slab_caches_mutex); | 3369 | mutex_unlock(&memcg->slab_caches_mutex); |