Skip to content

Commit c64004d

Browse files
committed
Merge tag 'cgroup-for-6.16-rc6-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup
Pull cgroup fixes from Tejun Heo: "An earlier commit to suppress a warning introduced a race condition where tasks can escape cgroup1 freezer. Revert the commit and simply remove the warning which was spurious to begin with" * tag 'cgroup-for-6.16-rc6-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup: Revert "cgroup_freezer: cgroup_freezing: Check if not frozen" sched,freezer: Remove unnecessary warning in __thaw_task
2 parents bd4a156 + 14a67b4 commit c64004d

File tree

2 files changed

+4
-19
lines changed

2 files changed

+4
-19
lines changed

kernel/cgroup/legacy_freezer.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,9 @@ static struct freezer *parent_freezer(struct freezer *freezer)
6666
bool cgroup_freezing(struct task_struct *task)
6767
{
6868
bool ret;
69-
unsigned int state;
7069

7170
rcu_read_lock();
72-
/* Check if the cgroup is still FREEZING, but not FROZEN. The extra
73-
* !FROZEN check is required, because the FREEZING bit is not cleared
74-
* when the state FROZEN is reached.
75-
*/
76-
state = task_freezer(task)->state;
77-
ret = (state & CGROUP_FREEZING) && !(state & CGROUP_FROZEN);
71+
ret = task_freezer(task)->state & CGROUP_FREEZING;
7872
rcu_read_unlock();
7973

8074
return ret;

kernel/freezer.c

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -201,18 +201,9 @@ static int __restore_freezer_state(struct task_struct *p, void *arg)
201201

202202
void __thaw_task(struct task_struct *p)
203203
{
204-
unsigned long flags;
205-
206-
spin_lock_irqsave(&freezer_lock, flags);
207-
if (WARN_ON_ONCE(freezing(p)))
208-
goto unlock;
209-
210-
if (!frozen(p) || task_call_func(p, __restore_freezer_state, NULL))
211-
goto unlock;
212-
213-
wake_up_state(p, TASK_FROZEN);
214-
unlock:
215-
spin_unlock_irqrestore(&freezer_lock, flags);
204+
guard(spinlock_irqsave)(&freezer_lock);
205+
if (frozen(p) && !task_call_func(p, __restore_freezer_state, NULL))
206+
wake_up_state(p, TASK_FROZEN);
216207
}
217208

218209
/**

0 commit comments

Comments
 (0)