diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memcontrol.c | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 3dd9fe35fe62..7f8219b58e0c 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -2946,17 +2946,6 @@ static int memcg_propagate_kmem(struct mem_cgroup *memcg) | |||
2946 | return ret; | 2946 | return ret; |
2947 | } | 2947 | } |
2948 | 2948 | ||
2949 | static int memcg_init_kmem(struct mem_cgroup *memcg) | ||
2950 | { | ||
2951 | int ret; | ||
2952 | |||
2953 | ret = memcg_propagate_kmem(memcg); | ||
2954 | if (ret) | ||
2955 | return ret; | ||
2956 | |||
2957 | return tcp_init_cgroup(memcg); | ||
2958 | } | ||
2959 | |||
2960 | static void memcg_offline_kmem(struct mem_cgroup *memcg) | 2949 | static void memcg_offline_kmem(struct mem_cgroup *memcg) |
2961 | { | 2950 | { |
2962 | struct cgroup_subsys_state *css; | 2951 | struct cgroup_subsys_state *css; |
@@ -3009,7 +2998,6 @@ static void memcg_free_kmem(struct mem_cgroup *memcg) | |||
3009 | static_branch_dec(&memcg_kmem_enabled_key); | 2998 | static_branch_dec(&memcg_kmem_enabled_key); |
3010 | WARN_ON(page_counter_read(&memcg->kmem)); | 2999 | WARN_ON(page_counter_read(&memcg->kmem)); |
3011 | } | 3000 | } |
3012 | tcp_destroy_cgroup(memcg); | ||
3013 | } | 3001 | } |
3014 | #else | 3002 | #else |
3015 | static int memcg_update_kmem_limit(struct mem_cgroup *memcg, | 3003 | static int memcg_update_kmem_limit(struct mem_cgroup *memcg, |
@@ -3017,16 +3005,9 @@ static int memcg_update_kmem_limit(struct mem_cgroup *memcg, | |||
3017 | { | 3005 | { |
3018 | return -EINVAL; | 3006 | return -EINVAL; |
3019 | } | 3007 | } |
3020 | static int memcg_init_kmem(struct mem_cgroup *memcg) | ||
3021 | { | ||
3022 | return 0; | ||
3023 | } | ||
3024 | static void memcg_offline_kmem(struct mem_cgroup *memcg) | 3008 | static void memcg_offline_kmem(struct mem_cgroup *memcg) |
3025 | { | 3009 | { |
3026 | } | 3010 | } |
3027 | static void memcg_free_kmem(struct mem_cgroup *memcg) | ||
3028 | { | ||
3029 | } | ||
3030 | #endif /* CONFIG_MEMCG_KMEM */ | 3011 | #endif /* CONFIG_MEMCG_KMEM */ |
3031 | 3012 | ||
3032 | /* | 3013 | /* |
@@ -4263,9 +4244,14 @@ mem_cgroup_css_online(struct cgroup_subsys_state *css) | |||
4263 | } | 4244 | } |
4264 | mutex_unlock(&memcg_create_mutex); | 4245 | mutex_unlock(&memcg_create_mutex); |
4265 | 4246 | ||
4266 | ret = memcg_init_kmem(memcg); | 4247 | #ifdef CONFIG_MEMCG_KMEM |
4248 | ret = memcg_propagate_kmem(memcg); | ||
4267 | if (ret) | 4249 | if (ret) |
4268 | return ret; | 4250 | return ret; |
4251 | ret = tcp_init_cgroup(memcg); | ||
4252 | if (ret) | ||
4253 | return ret; | ||
4254 | #endif | ||
4269 | 4255 | ||
4270 | #ifdef CONFIG_INET | 4256 | #ifdef CONFIG_INET |
4271 | if (cgroup_subsys_on_dfl(memory_cgrp_subsys) && !cgroup_memory_nosocket) | 4257 | if (cgroup_subsys_on_dfl(memory_cgrp_subsys) && !cgroup_memory_nosocket) |
@@ -4317,11 +4303,16 @@ static void mem_cgroup_css_free(struct cgroup_subsys_state *css) | |||
4317 | { | 4303 | { |
4318 | struct mem_cgroup *memcg = mem_cgroup_from_css(css); | 4304 | struct mem_cgroup *memcg = mem_cgroup_from_css(css); |
4319 | 4305 | ||
4320 | memcg_free_kmem(memcg); | ||
4321 | #ifdef CONFIG_INET | 4306 | #ifdef CONFIG_INET |
4322 | if (cgroup_subsys_on_dfl(memory_cgrp_subsys) && !cgroup_memory_nosocket) | 4307 | if (cgroup_subsys_on_dfl(memory_cgrp_subsys) && !cgroup_memory_nosocket) |
4323 | static_branch_dec(&memcg_sockets_enabled_key); | 4308 | static_branch_dec(&memcg_sockets_enabled_key); |
4324 | #endif | 4309 | #endif |
4310 | |||
4311 | #ifdef CONFIG_MEMCG_KMEM | ||
4312 | memcg_free_kmem(memcg); | ||
4313 | tcp_destroy_cgroup(memcg); | ||
4314 | #endif | ||
4315 | |||
4325 | __mem_cgroup_free(memcg); | 4316 | __mem_cgroup_free(memcg); |
4326 | } | 4317 | } |
4327 | 4318 | ||