cgroup_iter_end(cgroup, &it);
 }
 
-static void freezer_change_state(struct freezer *freezer,
-                                enum freezer_state goal_state)
+/**
+ * freezer_apply_state - apply state change to a single cgroup_freezer
+ * @freezer: freezer to apply state change to
+ * @freeze: whether to freeze or unfreeze
+ */
+static void freezer_apply_state(struct freezer *freezer, bool freeze)
 {
        /* also synchronizes against task migration, see freezer_attach() */
-       spin_lock_irq(&freezer->lock);
+       lockdep_assert_held(&freezer->lock);
 
-       switch (goal_state) {
-       case CGROUP_THAWED:
-               if (freezer->state != CGROUP_THAWED)
-                       atomic_dec(&system_freezing_cnt);
-               freezer->state = CGROUP_THAWED;
-               unfreeze_cgroup(freezer);
-               break;
-       case CGROUP_FROZEN:
+       if (freeze) {
                if (freezer->state == CGROUP_THAWED)
                        atomic_inc(&system_freezing_cnt);
                freezer->state = CGROUP_FREEZING;
                freeze_cgroup(freezer);
-               break;
-       default:
-               BUG();
+       } else {
+               if (freezer->state != CGROUP_THAWED)
+                       atomic_dec(&system_freezing_cnt);
+               freezer->state = CGROUP_THAWED;
+               unfreeze_cgroup(freezer);
        }
+}
 
+/**
+ * freezer_change_state - change the freezing state of a cgroup_freezer
+ * @freezer: freezer of interest
+ * @freeze: whether to freeze or thaw
+ *
+ * Freeze or thaw @cgroup according to @freeze.
+ */
+static void freezer_change_state(struct freezer *freezer, bool freeze)
+{
+       /* update @freezer */
+       spin_lock_irq(&freezer->lock);
+       freezer_apply_state(freezer, freeze);
        spin_unlock_irq(&freezer->lock);
 }
 
 static int freezer_write(struct cgroup *cgroup, struct cftype *cft,
                         const char *buffer)
 {
-       enum freezer_state goal_state;
+       bool freeze;
 
        if (strcmp(buffer, freezer_state_strs[CGROUP_THAWED]) == 0)
-               goal_state = CGROUP_THAWED;
+               freeze = false;
        else if (strcmp(buffer, freezer_state_strs[CGROUP_FROZEN]) == 0)
-               goal_state = CGROUP_FROZEN;
+               freeze = true;
        else
                return -EINVAL;
 
-       freezer_change_state(cgroup_freezer(cgroup), goal_state);
+       freezer_change_state(cgroup_freezer(cgroup), freeze);
        return 0;
 }