workqueue: restore POOL_MANAGING_WORKERS
authorLai Jiangshan <laijs@cn.fujitsu.com>
Mon, 10 Sep 2012 17:03:33 +0000 (10:03 -0700)
committerTejun Heo <tj@kernel.org>
Mon, 10 Sep 2012 17:04:54 +0000 (10:04 -0700)
commit552a37e9360a293cd20e7f8ff1fb326a244c5f1e
tree00d89d5778d4ab8320f6bf24d81e33a290f9fcb1
parentec58815ab0409a921a7c9744eb4ca44866b14d71
workqueue: restore POOL_MANAGING_WORKERS

This patch restores POOL_MANAGING_WORKERS which was replaced by
pool->manager_mutex by 6037315269 "workqueue: use mutex for global_cwq
manager exclusion".

There's a subtle idle worker depletion bug across CPU hotplug events
and we need to distinguish an actual manager and CPU hotplug
preventing management.  POOL_MANAGING_WORKERS will be used for the
former and manager_mutex the later.

This patch just lays POOL_MANAGING_WORKERS on top of the existing
manager_mutex and doesn't introduce any synchronization changes.  The
next patch will update it.

Note that this patch fixes a non-critical anomaly where
too_many_workers() may return %true spuriously while CPU hotplug is in
progress.  While the issue could schedule idle timer spuriously, it
didn't trigger any actual misbehavior.

tj: Rewrote patch description.

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/workqueue.c