workqueue: clear leftover flags when detached

When a worker is detached, the worker->flags may still have WORKER_UNBOUND
or WORKER_REBOUND, it is OK for all cases:
  1) if it is a normal worker, the worker will be dead, it is OK.
  2) if it is a rescuer, it may re-attach to a pool with this leftover flag[s],
     it is still correct except it may cause unneeded wakeup.

It is correct but not good, so we just remove the leftover flags.

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
Lai Jiangshan 2014-06-03 15:32:52 +08:00 committed by Tejun Heo
parent 25ef09586d
commit b62c075194

View File

@ -1663,6 +1663,9 @@ static void worker_detach_from_pool(struct worker *worker,
detach_completion = pool->detach_completion; detach_completion = pool->detach_completion;
mutex_unlock(&pool->attach_mutex); mutex_unlock(&pool->attach_mutex);
/* clear leftover flags without pool->lock after it is detached */
worker->flags &= ~(WORKER_UNBOUND | WORKER_REBOUND);
if (detach_completion) if (detach_completion)
complete(detach_completion); complete(detach_completion);
} }