Skip to content

Commit 37fb58a

Browse files
Chen Ridonghtejun
authored andcommitted
cgroup,freezer: fix incomplete freezing when attaching tasks
An issue was found: # cd /sys/fs/cgroup/freezer/ # mkdir test # echo FROZEN > test/freezer.state # cat test/freezer.state FROZEN # sleep 1000 & [1] 863 # echo 863 > test/cgroup.procs # cat test/freezer.state FREEZING When tasks are migrated to a frozen cgroup, the freezer fails to immediately freeze the tasks, causing the cgroup to remain in the "FREEZING". The freeze_task() function is called before clearing the CGROUP_FROZEN flag. This causes the freezing() check to incorrectly return false, preventing __freeze_task() from being invoked for the migrated task. To fix this issue, clear the CGROUP_FROZEN state before calling freeze_task(). Fixes: f5d39b0 ("freezer,sched: Rewrite core freezer logic") Cc: [email protected] # v6.1+ Reported-by: Zhong Jiawei <[email protected]> Signed-off-by: Chen Ridong <[email protected]> Acked-by: Michal Koutný <[email protected]> Signed-off-by: Tejun Heo <[email protected]>
1 parent c853d18 commit 37fb58a

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

kernel/cgroup/legacy_freezer.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,13 +188,12 @@ static void freezer_attach(struct cgroup_taskset *tset)
188188
if (!(freezer->state & CGROUP_FREEZING)) {
189189
__thaw_task(task);
190190
} else {
191-
freeze_task(task);
192-
193191
/* clear FROZEN and propagate upwards */
194192
while (freezer && (freezer->state & CGROUP_FROZEN)) {
195193
freezer->state &= ~CGROUP_FROZEN;
196194
freezer = parent_freezer(freezer);
197195
}
196+
freeze_task(task);
198197
}
199198
}
200199

0 commit comments

Comments
 (0)