Pull workqueue fix from Tejun Heo: "CPU hotplug callbacks can invoke DOWN_FAILED w/o preceding DOWN_PREPARE which can trigger a WARN_ON() in workqueue. The bug has been there for a very long time. It only triggers if CPU down fails at a specific point and I don't think it has adverse effects other than the warning messages. The fix is very low impact" * 'for-4.6-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: workqueue: fix rebind bound workers warning
Showing the changes to kernel/workqueue.c (1 of 1 file). Show all
Unified · Split
| @@ -4554,6 +4554,17 @@ static void rebind_workers(struct worker_pool *pool) · 4553 unmodified lines | |||
| 4554 | pool->attrs->cpumask) < 0); | 4554 | pool->attrs->cpumask) < 0); |
| 4555 | 4555 | ||
| 4556 | spin_lock_irq(&pool->lock); | 4556 | spin_lock_irq(&pool->lock); |
| 4557 | |||
| 4558 | /* | ||
| 4559 | * XXX: CPU hotplug notifiers are weird and can call DOWN_FAILED | ||
| 4560 | * w/o preceding DOWN_PREPARE. Work around it. CPU hotplug is | ||
| 4561 | * being reworked and this can go away in time. | ||
| 4562 | */ | ||
| 4563 | if (!(pool->flags & POOL_DISASSOCIATED)) { | ||
| 4564 | spin_unlock_irq(&pool->lock); | ||
| 4565 | return; | ||
| 4566 | } | ||
| 4567 | |||
| 4557 | pool->flags &= ~POOL_DISASSOCIATED; | 4568 | pool->flags &= ~POOL_DISASSOCIATED; |
| 4558 | 4569 | ||
| 4559 | for_each_pool_worker(worker, pool) { | 4570 | for_each_pool_worker(worker, pool) { |