Skip to content
Commit def98c84 authored by Tejun Heo's avatar Tejun Heo
Browse files

workqueue: Fix spurious sanity check failures in destroy_workqueue()



Before actually destrying a workqueue, destroy_workqueue() checks
whether it's actually idle.  If it isn't, it prints out a bunch of
warning messages and leaves the workqueue dangling.  It unfortunately
has a couple issues.

* Mayday list queueing increments pwq's refcnts which gets detected as
  busy and fails the sanity checks.  However, because mayday list
  queueing is asynchronous, this condition can happen without any
  actual work items left in the workqueue.

* Sanity check failure leaves the sysfs interface behind too which can
  lead to init failure of newer instances of the workqueue.

This patch fixes the above two by

* If a workqueue has a rescuer, disable and kill the rescuer before
  sanity checks.  Disabling and killing is guaranteed to flush the
  existing mayday list.

* Remove sysfs interface before sanity checks.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Reported-by: default avatarMarcin Pawlowski <mpawlowski@fb.com>
Reported-by: default avatar"Williams, Gerald S" <gerald.s.williams@intel.com>
Cc: stable@vger.kernel.org
parent f60c55a9
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment