]> Gentwo Git Trees - linux/.git/commit
workqueue: Don't rely on wq->rescuer to stop rescuer
authorLai Jiangshan <jiangshan.ljs@antgroup.com>
Fri, 21 Nov 2025 14:57:16 +0000 (22:57 +0800)
committerTejun Heo <tj@kernel.org>
Fri, 21 Nov 2025 19:45:36 +0000 (09:45 -1000)
commit6d90215dc015f7630589b29fc2c771bce16a4c96
tree0099bb6fa953c422f2e1e5ca20ef55434783229b
parent7b05c90b3302cf3d830dfa6f8961376bcaf43b94
workqueue: Don't rely on wq->rescuer to stop rescuer

The commit1 def98c84b6cd ("workqueue: Fix spurious sanity check failures
in destroy_workqueue()") tries to fix spurious sanity check failures by
stopping send_mayday() via setting wq->rescuer to NULL.

But it fails to stop the pwq->mayday_node requeuing in the rescuer, and
the commit2 e66b39af00f4 ("workqueue: Fix pwq ref leak in
rescuer_thread()") fixes it by checking wq->rescuer which is the result
of commit1.

Both commits together really fix spurious sanity check failures caused
by the rescuer, but they both use a convoluted method by relying on
wq->rescuer state rather than the real count of work items.

Actually __WQ_DESTROYING and drain_workqueue() together already stop
send_mayday() by draining all the work items and ensuring no new work
item requeuing.

And the more proper fix to stop the pwq->mayday_node requeuing in the
rescuer is from commit3 4f3f4cf388f8 ("workqueue: avoid unneeded
requeuing the pwq in rescuer thread") and renders the checking of
wq->rescuer in commit2 unnecessary.

So __WQ_DESTROYING, drain_workqueue() and commit3 together fix spurious
sanity check failures introduced by the rescuer.

Just remove the convoluted code of using wq->rescuer.

Signed-off-by: Lai Jiangshan <jiangshan.ljs@antgroup.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/workqueue.c