aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
authorJohannes Weiner <hannes@cmpxchg.org>2016-01-20 18:02:29 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2016-01-20 20:09:18 -0500
commit3893e302f6a377c4ef0f077f190bf760bf84e0be (patch)
tree175b76f8c6b0ca1d243420a192e796a9665da15d /mm
parent8e0a891213fbddcec231c9d1d7577c320c77a25a (diff)
mm: memcontrol: separate kmem code from legacy tcp accounting code
The cgroup2 memory controller will include important in-kernel memory consumers per default, including socket memory, but it will no longer carry the historic tcp control interface. Separate the kmem state init from the tcp control interface init in preparation for that. Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Tejun Heo <tj@kernel.org> Acked-by: Vladimir Davydov <vdavydov@virtuozzo.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/memcontrol.c33
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
2949static 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
2960static void memcg_offline_kmem(struct mem_cgroup *memcg) 2949static 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
3015static int memcg_update_kmem_limit(struct mem_cgroup *memcg, 3003static 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}
3020static int memcg_init_kmem(struct mem_cgroup *memcg)
3021{
3022 return 0;
3023}
3024static void memcg_offline_kmem(struct mem_cgroup *memcg) 3008static void memcg_offline_kmem(struct mem_cgroup *memcg)
3025{ 3009{
3026} 3010}
3027static 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