<div dir="ltr">The comment to flush_scheduled_work states that calling this function in the context of a work routine will lead to deadlock. I think it means following scenario:<div><br>static void</div><div>handler(struct work_struct *work)<br>{<br>    flush_scheduled_work();<br>}<br>static DECLARE_WORK(work, handler);<br>schedule_work(&work);<br></div><div><div><div><pre style="white-space:pre-wrap;padding:0px;margin-top:0px;margin-bottom:0px;color:rgb(0,0,0)"></pre><div><br></div><div>If this is true for system workqueue (system_wq) is it also applied to custom workqueue? I want to wait for completion of the workqueues in another workqueue.  For example:<div><br></div></div></div></div></div><div>static void<br></div><div>handler(struct work_struct *work)<br>{<br>    struct work_data * data = (struct work_data *)work;<br>    flush_scheduled_work();<br>    kfree(data);<br>}<br></div><div>  wq = create_workqueue("wq_test");<br>  data = kmalloc(sizeof(struct work_data), GFP_KERNEL);<br>  INIT_WORK(&data->work, handler);<br>  queue_work(wq, &data->work);</div><div><br></div><div></div></div>