From f9b0449bc00bf04f437f0019f281b0e72ada5fbb Mon Sep 17 00:00:00 2001 From: Li Zefan Date: Wed, 29 Oct 2008 14:00:54 -0700 Subject: [PATCH] --- yaml --- r: 118026 b: refs/heads/master c: 51308ee59dee1136ed599d875ea8968d7be55c91 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/cgroup_freezer.c | 19 +++++++------------ 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/[refs] b/[refs] index a8df341645e0..0a66c54bb0bf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 00c2e63c31d0f431952ff2a671c5c6997dd4f8b2 +refs/heads/master: 51308ee59dee1136ed599d875ea8968d7be55c91 diff --git a/trunk/kernel/cgroup_freezer.c b/trunk/kernel/cgroup_freezer.c index 5e6d26b66e88..7fa476f01d05 100644 --- a/trunk/kernel/cgroup_freezer.c +++ b/trunk/kernel/cgroup_freezer.c @@ -296,27 +296,22 @@ static int freezer_change_state(struct cgroup *cgroup, int retval = 0; freezer = cgroup_freezer(cgroup); + spin_lock_irq(&freezer->lock); + update_freezer_state(cgroup, freezer); if (goal_state == freezer->state) goto out; - switch (freezer->state) { + + switch (goal_state) { case CGROUP_THAWED: - retval = try_to_freeze_cgroup(cgroup, freezer); + unfreeze_cgroup(cgroup, freezer); break; - case CGROUP_FREEZING: - if (goal_state == CGROUP_FROZEN) { - /* Userspace is retrying after - * "/bin/echo FROZEN > freezer.state" returned -EBUSY */ - retval = try_to_freeze_cgroup(cgroup, freezer); - break; - } - /* state == FREEZING and goal_state == THAWED, so unfreeze */ case CGROUP_FROZEN: - unfreeze_cgroup(cgroup, freezer); + retval = try_to_freeze_cgroup(cgroup, freezer); break; default: - break; + BUG(); } out: spin_unlock_irq(&freezer->lock);