Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a34815b9 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for-3.2-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:
  cgroup_freezer: fix freezing groups with stopped tasks
parents 9b5a4d4f 884a45d9
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -153,6 +153,13 @@ static void freezer_destroy(struct cgroup_subsys *ss,
	kfree(cgroup_freezer(cgroup));
}

/* task is frozen or will freeze immediately when next it gets woken */
static bool is_task_frozen_enough(struct task_struct *task)
{
	return frozen(task) ||
		(task_is_stopped_or_traced(task) && freezing(task));
}

/*
 * The call to cgroup_lock() in the freezer.state write method prevents
 * a write to that file racing against an attach, and hence the
@@ -231,7 +238,7 @@ static void update_if_frozen(struct cgroup *cgroup,
	cgroup_iter_start(cgroup, &it);
	while ((task = cgroup_iter_next(cgroup, &it))) {
		ntotal++;
		if (frozen(task))
		if (is_task_frozen_enough(task))
			nfrozen++;
	}

@@ -284,7 +291,7 @@ static int try_to_freeze_cgroup(struct cgroup *cgroup, struct freezer *freezer)
	while ((task = cgroup_iter_next(cgroup, &it))) {
		if (!freeze_task(task, true))
			continue;
		if (frozen(task))
		if (is_task_frozen_enough(task))
			continue;
		if (!freezing(task) && !freezer_should_skip(task))
			num_cant_freeze_now++;