aboutsummaryrefslogtreecommitdiffstats
path: root/mm/memcontrol.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-03-20 21:11:21 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2012-03-20 21:11:21 -0400
commit0d9cabdccedb79ee5f27b77ff51f29a9e7d23275 (patch)
tree8bfb64c3672d058eb90aec3c3a9c4f61cef9097c /mm/memcontrol.c
parent701085b219016d38f105b031381b9cee6200253a (diff)
parent3ce3230a0cff484e5130153f244d4fb8a56b3a8b (diff)
Merge branch 'for-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
Pull cgroup changes from Tejun Heo: "Out of the 8 commits, one fixes a long-standing locking issue around tasklist walking and others are cleanups." * 'for-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: cgroup: Walk task list under tasklist_lock in cgroup_enable_task_cg_list cgroup: Remove wrong comment on cgroup_enable_task_cg_list() cgroup: remove cgroup_subsys argument from callbacks cgroup: remove extra calls to find_existing_css_set cgroup: replace tasklist_lock with rcu_read_lock cgroup: simplify double-check locking in cgroup_attach_proc cgroup: move struct cgroup_pidlist out from the header file cgroup: remove cgroup_attach_task_current_cg()
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r--mm/memcontrol.c48
1 files changed, 19 insertions, 29 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 58a08fc7414a..26c6f4ec20f4 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -4602,10 +4602,9 @@ static int register_kmem_files(struct cgroup *cont, struct cgroup_subsys *ss)
4602 return mem_cgroup_sockets_init(cont, ss); 4602 return mem_cgroup_sockets_init(cont, ss);
4603}; 4603};
4604 4604
4605static void kmem_cgroup_destroy(struct cgroup_subsys *ss, 4605static void kmem_cgroup_destroy(struct cgroup *cont)
4606 struct cgroup *cont)
4607{ 4606{
4608 mem_cgroup_sockets_destroy(cont, ss); 4607 mem_cgroup_sockets_destroy(cont);
4609} 4608}
4610#else 4609#else
4611static int register_kmem_files(struct cgroup *cont, struct cgroup_subsys *ss) 4610static int register_kmem_files(struct cgroup *cont, struct cgroup_subsys *ss)
@@ -4613,8 +4612,7 @@ static int register_kmem_files(struct cgroup *cont, struct cgroup_subsys *ss)
4613 return 0; 4612 return 0;
4614} 4613}
4615 4614
4616static void kmem_cgroup_destroy(struct cgroup_subsys *ss, 4615static void kmem_cgroup_destroy(struct cgroup *cont)
4617 struct cgroup *cont)
4618{ 4616{
4619} 4617}
4620#endif 4618#endif
@@ -4927,7 +4925,7 @@ err_cleanup:
4927} 4925}
4928 4926
4929static struct cgroup_subsys_state * __ref 4927static struct cgroup_subsys_state * __ref
4930mem_cgroup_create(struct cgroup_subsys *ss, struct cgroup *cont) 4928mem_cgroup_create(struct cgroup *cont)
4931{ 4929{
4932 struct mem_cgroup *memcg, *parent; 4930 struct mem_cgroup *memcg, *parent;
4933 long error = -ENOMEM; 4931 long error = -ENOMEM;
@@ -4989,20 +4987,18 @@ free_out:
4989 return ERR_PTR(error); 4987 return ERR_PTR(error);
4990} 4988}
4991 4989
4992static int mem_cgroup_pre_destroy(struct cgroup_subsys *ss, 4990static int mem_cgroup_pre_destroy(struct cgroup *cont)
4993 struct cgroup *cont)
4994{ 4991{
4995 struct mem_cgroup *memcg = mem_cgroup_from_cont(cont); 4992 struct mem_cgroup *memcg = mem_cgroup_from_cont(cont);
4996 4993
4997 return mem_cgroup_force_empty(memcg, false); 4994 return mem_cgroup_force_empty(memcg, false);
4998} 4995}
4999 4996
5000static void mem_cgroup_destroy(struct cgroup_subsys *ss, 4997static void mem_cgroup_destroy(struct cgroup *cont)
5001 struct cgroup *cont)
5002{ 4998{
5003 struct mem_cgroup *memcg = mem_cgroup_from_cont(cont); 4999 struct mem_cgroup *memcg = mem_cgroup_from_cont(cont);
5004 5000
5005 kmem_cgroup_destroy(ss, cont); 5001 kmem_cgroup_destroy(cont);
5006 5002
5007 mem_cgroup_put(memcg); 5003 mem_cgroup_put(memcg);
5008} 5004}
@@ -5339,9 +5335,8 @@ static void mem_cgroup_clear_mc(void)
5339 mem_cgroup_end_move(from); 5335 mem_cgroup_end_move(from);
5340} 5336}
5341 5337
5342static int mem_cgroup_can_attach(struct cgroup_subsys *ss, 5338static int mem_cgroup_can_attach(struct cgroup *cgroup,
5343 struct cgroup *cgroup, 5339 struct cgroup_taskset *tset)
5344 struct cgroup_taskset *tset)
5345{ 5340{
5346 struct task_struct *p = cgroup_taskset_first(tset); 5341 struct task_struct *p = cgroup_taskset_first(tset);
5347 int ret = 0; 5342 int ret = 0;
@@ -5379,9 +5374,8 @@ static int mem_cgroup_can_attach(struct cgroup_subsys *ss,
5379 return ret; 5374 return ret;
5380} 5375}
5381 5376
5382static void mem_cgroup_cancel_attach(struct cgroup_subsys *ss, 5377static void mem_cgroup_cancel_attach(struct cgroup *cgroup,
5383 struct cgroup *cgroup, 5378 struct cgroup_taskset *tset)
5384 struct cgroup_taskset *tset)
5385{ 5379{
5386 mem_cgroup_clear_mc(); 5380 mem_cgroup_clear_mc();
5387} 5381}
@@ -5496,9 +5490,8 @@ retry:
5496 up_read(&mm->mmap_sem); 5490 up_read(&mm->mmap_sem);
5497} 5491}
5498 5492
5499static void mem_cgroup_move_task(struct cgroup_subsys *ss, 5493static void mem_cgroup_move_task(struct cgroup *cont,
5500 struct cgroup *cont, 5494 struct cgroup_taskset *tset)
5501 struct cgroup_taskset *tset)
5502{ 5495{
5503 struct task_struct *p = cgroup_taskset_first(tset); 5496 struct task_struct *p = cgroup_taskset_first(tset);
5504 struct mm_struct *mm = get_task_mm(p); 5497 struct mm_struct *mm = get_task_mm(p);
@@ -5513,20 +5506,17 @@ static void mem_cgroup_move_task(struct cgroup_subsys *ss,
5513 mem_cgroup_clear_mc(); 5506 mem_cgroup_clear_mc();
5514} 5507}
5515#else /* !CONFIG_MMU */ 5508#else /* !CONFIG_MMU */
5516static int mem_cgroup_can_attach(struct cgroup_subsys *ss, 5509static int mem_cgroup_can_attach(struct cgroup *cgroup,
5517 struct cgroup *cgroup, 5510 struct cgroup_taskset *tset)
5518 struct cgroup_taskset *tset)
5519{ 5511{
5520 return 0; 5512 return 0;
5521} 5513}
5522static void mem_cgroup_cancel_attach(struct cgroup_subsys *ss, 5514static void mem_cgroup_cancel_attach(struct cgroup *cgroup,
5523 struct cgroup *cgroup, 5515 struct cgroup_taskset *tset)
5524 struct cgroup_taskset *tset)
5525{ 5516{
5526} 5517}
5527static void mem_cgroup_move_task(struct cgroup_subsys *ss, 5518static void mem_cgroup_move_task(struct cgroup *cont,
5528 struct cgroup *cont, 5519 struct cgroup_taskset *tset)
5529 struct cgroup_taskset *tset)
5530{ 5520{
5531} 5521}
5532#endif 5522#endif