Hello, Leon. On Tue, Jun 04, 2024 at 02:38:34PM +0300, Leon Romanovsky wrote: > Thanks, it is very rare situation where call to flush/drain queue > (in our case kthread_flush_worker) in the middle of the allocation > flow can be correct. I can't remember any such case. > > So even we don't fully understand the root cause, the reimplementation > is still valid and improves existing code. It's not valid. pwq release is async and while wq free in the error path isn't. The flush is there so that we finish the async part before synchronize error handling. The patch you posted will can lead to double free after a pwq allocation failure. We can make the error path synchronous but the pwq free path should be updated first so that it stays synchronous in the error path. Note that it *needs* to be asynchronous in non-error paths, so it's going to be a bit subtle one way or the other. Thanks. -- tejun