On 11/30, Roman Gushchin wrote: > > +void cgroup_enter_frozen(void) > +{ > + if (!current->frozen) { > + struct cgroup *cgrp; > + > + spin_lock_irq(&css_set_lock); > + current->frozen = true; > + cgrp = task_dfl_cgroup(current); > + cgrp->freezer.nr_frozen_tasks++; > + WARN_ON_ONCE(cgrp->freezer.nr_frozen_tasks > > + cgrp->freezer.nr_tasks_to_freeze); > + cgroup_update_frozen(cgrp, true); > + spin_unlock_irq(&css_set_lock); > + } > + > + __set_current_state(TASK_INTERRUPTIBLE); > + schedule(); > + __set_current_state(TASK_RUNNING); forgot to mention, schedule() always returns in TASK_RUNNING, so the 2nd __set_current_state() is pointless. Oleg.