diff --git a/kernel/workqueue.c b/kernel/workqueue.c index c85825e17df8..aae1004d0a59 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -4743,6 +4743,12 @@ struct workqueue_struct *alloc_workqueue(const char *fmt, wq_free_lockdep(wq); err_free_wq: free_workqueue_attrs(wq->unbound_attrs); + if (wq->cpu_pwq) { + for_each_possible_cpu(cpu) + kfree(*per_cpu_ptr(wq->cpu_pwq, cpu)); + free_percpu(wq->cpu_pwq); + wq->cpu_pwq = NULL; + } kfree(wq); return NULL; err_destroy: