• L
    workqueue: remove the empty check in too_many_workers() · e6a9a771
    Lai Jiangshan 提交于
    The commit ea1abd61 ("workqueue: reimplement idle worker rebinding")
    used a trick which simply removes all to-be-bound idle workers from the
    idle list and lets them add themselves back after completing rebinding.
    
    And this trick caused the @worker_pool->nr_idle may deviate than the actual
    number of idle workers on @worker_pool->idle_list.  More specifically,
    nr_idle may be non-zero while ->idle_list is empty.  All users of
    ->nr_idle and ->idle_list are audited.  The only affected one is
    too_many_workers() which is updated to check %false if ->idle_list is
    empty regardless of ->nr_idle.
    
    The commit/trick was complicated due to it just tried to simplify an even
    more complicated problem (workers had to rebind itself). But the commit
    a9ab775b ("workqueue: directly restore CPU affinity of workers
    from CPU_ONLINE") fixed all these problems and the mentioned trick was
    useless and is gone.
    
    So, now the @worker_pool->nr_idle is exactly the actual number of workers
    on @worker_pool->idle_list. too_many_workers() should recover as it was
    before the trick. So we remove the empty check.
    Signed-off-by: NLai Jiangshan <laijs@cn.fujitsu.com>
    Signed-off-by: NTejun Heo <tj@kernel.org>
    e6a9a771
workqueue.c 137.0 KB