summaryrefslogtreecommitdiffstats
path: root/kernel/cgroup_freezer.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-10-06 15:02:30 +0200
committerIngo Molnar <mingo@elte.hu>2009-10-06 15:02:34 +0200
commitd9b2002c406011164f245de7a81304625989f1c9 (patch)
treea2bb74773cd1409acbec5eb2fbba2ae9889d55e8 /kernel/cgroup_freezer.c
parentc3b32fcbc7f4fd9a9b84718b991b175b0fd53f8c (diff)
parent906010b2134e14a2e377decbadd357b3d0ab9c6a (diff)
downloadblackbird-op-linux-d9b2002c406011164f245de7a81304625989f1c9.tar.gz
blackbird-op-linux-d9b2002c406011164f245de7a81304625989f1c9.zip
Merge branch 'perf/urgent' into perf/core
Merge reason: Upcoming patch is dependent on a fix in perf/urgent. Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/cgroup_freezer.c')
-rw-r--r--kernel/cgroup_freezer.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/kernel/cgroup_freezer.c b/kernel/cgroup_freezer.c
index fb249e2bcada..59e9ef6aab40 100644
--- a/kernel/cgroup_freezer.c
+++ b/kernel/cgroup_freezer.c
@@ -159,7 +159,7 @@ static bool is_task_frozen_enough(struct task_struct *task)
*/
static int freezer_can_attach(struct cgroup_subsys *ss,
struct cgroup *new_cgroup,
- struct task_struct *task)
+ struct task_struct *task, bool threadgroup)
{
struct freezer *freezer;
@@ -177,6 +177,19 @@ static int freezer_can_attach(struct cgroup_subsys *ss,
if (freezer->state == CGROUP_FROZEN)
return -EBUSY;
+ if (threadgroup) {
+ struct task_struct *c;
+
+ rcu_read_lock();
+ list_for_each_entry_rcu(c, &task->thread_group, thread_group) {
+ if (is_task_frozen_enough(c)) {
+ rcu_read_unlock();
+ return -EBUSY;
+ }
+ }
+ rcu_read_unlock();
+ }
+
return 0;
}
OpenPOWER on IntegriCloud