File tree Expand file tree Collapse file tree 1 file changed +8
-7
lines changed Expand file tree Collapse file tree 1 file changed +8
-7
lines changed Original file line number Diff line number Diff line change @@ -5467,12 +5467,6 @@ static int alloc_and_link_pwqs(struct workqueue_struct *wq)
5467
5467
}
5468
5468
cpus_read_unlock ();
5469
5469
5470
- /* for unbound pwq, flush the pwq_release_worker ensures that the
5471
- * pwq_release_workfn() completes before calling kfree(wq).
5472
- */
5473
- if (ret )
5474
- kthread_flush_worker (pwq_release_worker );
5475
-
5476
5470
return ret ;
5477
5471
5478
5472
enomem :
@@ -5705,8 +5699,15 @@ struct workqueue_struct *alloc_workqueue(const char *fmt,
5705
5699
return wq ;
5706
5700
5707
5701
err_free_node_nr_active :
5708
- if (wq -> flags & WQ_UNBOUND )
5702
+ /*
5703
+ * Failed alloc_and_link_pwqs() may leave pending pwq->release_work,
5704
+ * flushing the pwq_release_worker ensures that the pwq_release_workfn()
5705
+ * completes before calling kfree(wq).
5706
+ */
5707
+ if (wq -> flags & WQ_UNBOUND ) {
5708
+ kthread_flush_worker (pwq_release_worker );
5709
5709
free_node_nr_active (wq -> node_nr_active );
5710
+ }
5710
5711
err_unreg_lockdep :
5711
5712
wq_unregister_lockdep (wq );
5712
5713
wq_free_lockdep (wq );
You can’t perform that action at this time.
0 commit comments