• Waiman Long's avatar
    workqueue: Bind unbound workqueue rescuer to wq_unbound_cpumask · 49584bb8
    Waiman Long authored
    Commit 85f0ab43 ("kernel/workqueue: Bind rescuer to unbound
    cpumask for WQ_UNBOUND") modified init_rescuer() to bind rescuer of
    an unbound workqueue to the cpumask in wq->unbound_attrs. However
    unbound_attrs->cpumask's of all workqueues are initialized to
    cpu_possible_mask and will only be changed if it has the WQ_SYSFS flag
    to expose a cpumask sysfs file to be written by users. So this patch
    doesn't achieve what it is intended to do.
    
    If an unbound workqueue is created after wq_unbound_cpumask is modified
    and there is no more unbound cpumask update after that, the unbound
    rescuer will be bound to all CPUs unless the workqueue is created
    with the WQ_SYSFS flag and a user explicitly modified its cpumask
    sysfs file.  Fix this problem by binding directly to wq_unbound_cpumask
    in init_rescuer().
    
    Fixes: 85f0ab43 ("kernel/workqueue: Bind rescuer to unbound cpumask for WQ_UNBOUND")
    Signed-off-by: default avatarWaiman Long <longman@redhat.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    49584bb8
workqueue.c 214 KB