diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-20 21:11:21 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-20 21:11:21 -0400 |
commit | 0d9cabdccedb79ee5f27b77ff51f29a9e7d23275 (patch) | |
tree | 8bfb64c3672d058eb90aec3c3a9c4f61cef9097c /mm/memcontrol.c | |
parent | 701085b219016d38f105b031381b9cee6200253a (diff) | |
parent | 3ce3230a0cff484e5130153f244d4fb8a56b3a8b (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.c | 48 |
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 | ||
4605 | static void kmem_cgroup_destroy(struct cgroup_subsys *ss, | 4605 | static 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 |
4611 | static int register_kmem_files(struct cgroup *cont, struct cgroup_subsys *ss) | 4610 | static 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 | ||
4616 | static void kmem_cgroup_destroy(struct cgroup_subsys *ss, | 4615 | static 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 | ||
4929 | static struct cgroup_subsys_state * __ref | 4927 | static struct cgroup_subsys_state * __ref |
4930 | mem_cgroup_create(struct cgroup_subsys *ss, struct cgroup *cont) | 4928 | mem_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 | ||
4992 | static int mem_cgroup_pre_destroy(struct cgroup_subsys *ss, | 4990 | static 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 | ||
5000 | static void mem_cgroup_destroy(struct cgroup_subsys *ss, | 4997 | static 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 | ||
5342 | static int mem_cgroup_can_attach(struct cgroup_subsys *ss, | 5338 | static 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 | ||
5382 | static void mem_cgroup_cancel_attach(struct cgroup_subsys *ss, | 5377 | static 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 | ||
5499 | static void mem_cgroup_move_task(struct cgroup_subsys *ss, | 5493 | static 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 */ |
5516 | static int mem_cgroup_can_attach(struct cgroup_subsys *ss, | 5509 | static 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 | } |
5522 | static void mem_cgroup_cancel_attach(struct cgroup_subsys *ss, | 5514 | static 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 | } |
5527 | static void mem_cgroup_move_task(struct cgroup_subsys *ss, | 5518 | static 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 |