workqueue: flush_delayed_work: keep the original workqueue for re-queueing
flush_delayed_work() always uses keventd_wq for re-queueing, but it should use the workqueue this dwork was queued on. Signed-off-by: Oleg Nesterov <oleg@redhat.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
@@ -774,7 +774,7 @@ void flush_delayed_work(struct delayed_work *dwork)
|
|||||||
{
|
{
|
||||||
if (del_timer_sync(&dwork->timer)) {
|
if (del_timer_sync(&dwork->timer)) {
|
||||||
struct cpu_workqueue_struct *cwq;
|
struct cpu_workqueue_struct *cwq;
|
||||||
cwq = wq_per_cpu(keventd_wq, get_cpu());
|
cwq = wq_per_cpu(get_wq_data(&dwork->work)->wq, get_cpu());
|
||||||
__queue_work(cwq, &dwork->work);
|
__queue_work(cwq, &dwork->work);
|
||||||
put_cpu();
|
put_cpu();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user