Re: [PATCH] workqueue: flush all pending jobs in destroy_workqueue()

From: Tejun Heo
Date: Thu Apr 24 2025 - 15:58:14 EST


Hello, Alice.

On Wed, Apr 23, 2025 at 05:51:27PM +0000, Alice Ryhl wrote:
...
> @@ -367,6 +367,8 @@ struct workqueue_struct {
> struct lockdep_map __lockdep_map;
> struct lockdep_map *lockdep_map;
> #endif
> + raw_spinlock_t delayed_lock; /* protects pending_list */
> + struct list_head delayed_list; /* list of pending delayed jobs */

I think we'll have to make this per-CPU or per-pwq. There can be a lot of
delayed work items being queued on, e.g., system_wq. Imagine that happening
on a multi-socket NUMA system. That cacheline is going to be bounced around
pretty hard.

Thanks.

--
tejun