diff --git a/kernel/workqueue.c b/kernel/workqueue.c index cee65cb43108..a9d64e08dffc 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -3509,12 +3509,6 @@ repeat: } } - /* - * Put the reference grabbed by send_mayday(). @pool won't - * go away while we're still attached to it. - */ - put_pwq(pwq); - /* * Leave this pool. Notify regular workers; otherwise, we end up * with 0 concurrency and stalling the execution. @@ -3525,6 +3519,12 @@ repeat: worker_detach_from_pool(rescuer); + /* + * Put the reference grabbed by send_mayday(). @pool might + * go away any time after it. + */ + put_pwq_unlocked(pwq); + raw_spin_lock_irq(&wq_mayday_lock); }