diff options
author | Tejun Heo <tj@kernel.org> | 2011-12-12 21:12:21 -0500 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2011-12-12 21:12:21 -0500 |
commit | 2f7ee5691eecb67c8108b92001a85563ea336ac5 (patch) | |
tree | 18cf60ea8a463f4a6cd59c68926ba4357ae8ff4c /mm/memcontrol.c | |
parent | 134d33737f9015761c3832f6b268fae6274aac7f (diff) |
cgroup: introduce cgroup_taskset and use it in subsys->can_attach(), cancel_attach() and attach()
Currently, there's no way to pass multiple tasks to cgroup_subsys
methods necessitating the need for separate per-process and per-task
methods. This patch introduces cgroup_taskset which can be used to
pass multiple tasks and their associated cgroups to cgroup_subsys
methods.
Three methods - can_attach(), cancel_attach() and attach() - are
converted to use cgroup_taskset. This unifies passed parameters so
that all methods have access to all information. Conversions in this
patchset are identical and don't introduce any behavior change.
-v2: documentation updated as per Paul Menage's suggestion.
Signed-off-by: Tejun Heo <tj@kernel.org>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Reviewed-by: Frederic Weisbecker <fweisbec@gmail.com>
Acked-by: Paul Menage <paul@paulmenage.org>
Acked-by: Li Zefan <lizf@cn.fujitsu.com>
Cc: Balbir Singh <bsingharora@gmail.com>
Cc: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: James Morris <jmorris@namei.org>
Diffstat (limited to 'mm/memcontrol.c')
-rw-r--r-- | mm/memcontrol.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 6aff93c98aca..81640e74a709 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
@@ -5298,8 +5298,9 @@ static void mem_cgroup_clear_mc(void) | |||
5298 | 5298 | ||
5299 | static int mem_cgroup_can_attach(struct cgroup_subsys *ss, | 5299 | static int mem_cgroup_can_attach(struct cgroup_subsys *ss, |
5300 | struct cgroup *cgroup, | 5300 | struct cgroup *cgroup, |
5301 | struct task_struct *p) | 5301 | struct cgroup_taskset *tset) |
5302 | { | 5302 | { |
5303 | struct task_struct *p = cgroup_taskset_first(tset); | ||
5303 | int ret = 0; | 5304 | int ret = 0; |
5304 | struct mem_cgroup *memcg = mem_cgroup_from_cont(cgroup); | 5305 | struct mem_cgroup *memcg = mem_cgroup_from_cont(cgroup); |
5305 | 5306 | ||
@@ -5337,7 +5338,7 @@ static int mem_cgroup_can_attach(struct cgroup_subsys *ss, | |||
5337 | 5338 | ||
5338 | static void mem_cgroup_cancel_attach(struct cgroup_subsys *ss, | 5339 | static void mem_cgroup_cancel_attach(struct cgroup_subsys *ss, |
5339 | struct cgroup *cgroup, | 5340 | struct cgroup *cgroup, |
5340 | struct task_struct *p) | 5341 | struct cgroup_taskset *tset) |
5341 | { | 5342 | { |
5342 | mem_cgroup_clear_mc(); | 5343 | mem_cgroup_clear_mc(); |
5343 | } | 5344 | } |
@@ -5454,9 +5455,9 @@ retry: | |||
5454 | 5455 | ||
5455 | static void mem_cgroup_move_task(struct cgroup_subsys *ss, | 5456 | static void mem_cgroup_move_task(struct cgroup_subsys *ss, |
5456 | struct cgroup *cont, | 5457 | struct cgroup *cont, |
5457 | struct cgroup *old_cont, | 5458 | struct cgroup_taskset *tset) |
5458 | struct task_struct *p) | ||
5459 | { | 5459 | { |
5460 | struct task_struct *p = cgroup_taskset_first(tset); | ||
5460 | struct mm_struct *mm = get_task_mm(p); | 5461 | struct mm_struct *mm = get_task_mm(p); |
5461 | 5462 | ||
5462 | if (mm) { | 5463 | if (mm) { |
@@ -5471,19 +5472,18 @@ static void mem_cgroup_move_task(struct cgroup_subsys *ss, | |||
5471 | #else /* !CONFIG_MMU */ | 5472 | #else /* !CONFIG_MMU */ |
5472 | static int mem_cgroup_can_attach(struct cgroup_subsys *ss, | 5473 | static int mem_cgroup_can_attach(struct cgroup_subsys *ss, |
5473 | struct cgroup *cgroup, | 5474 | struct cgroup *cgroup, |
5474 | struct task_struct *p) | 5475 | struct cgroup_taskset *tset) |
5475 | { | 5476 | { |
5476 | return 0; | 5477 | return 0; |
5477 | } | 5478 | } |
5478 | static void mem_cgroup_cancel_attach(struct cgroup_subsys *ss, | 5479 | static void mem_cgroup_cancel_attach(struct cgroup_subsys *ss, |
5479 | struct cgroup *cgroup, | 5480 | struct cgroup *cgroup, |
5480 | struct task_struct *p) | 5481 | struct cgroup_taskset *tset) |
5481 | { | 5482 | { |
5482 | } | 5483 | } |
5483 | static void mem_cgroup_move_task(struct cgroup_subsys *ss, | 5484 | static void mem_cgroup_move_task(struct cgroup_subsys *ss, |
5484 | struct cgroup *cont, | 5485 | struct cgroup *cont, |
5485 | struct cgroup *old_cont, | 5486 | struct cgroup_taskset *tset) |
5486 | struct task_struct *p) | ||
5487 | { | 5487 | { |
5488 | } | 5488 | } |
5489 | #endif | 5489 | #endif |