On 2022/02/13 1:37, Bart Van Assche wrote: > On 2/11/22 21:31, Tetsuo Handa wrote: >> But this report might be suggesting us that we should consider >> deprecating (and eventually getting rid of) system-wide workqueues >> (declared in include/linux/workqueue.h), for since flush_workqueue() >> synchronously waits for completion, sharing system-wide workqueues >> among multiple modules can generate unexpected locking dependency >> chain (like this report). > > I do not agree with deprecating system-wide workqueues. I think that > all flush_workqueue(system_long_wq) calls should be reviewed since > these are deadlock-prone. > > Thanks, > > Bart. The loop module is not using flush_workqueue(system_long_wq) call; it only scheduled a work via system_long_wq which will call flush_workqueue() (of a local workqueue) from drain_workqueue() from destroy_workqueue() from work function. How can reviewing all flush_workqueue(system_long_wq) calls help?