flush_scheduled_work() only flushes work queued to the global
keventd_wq, but pciback is using its own local work queue, so that is
what needs to be flushed.
Calling cancel_delayed_work() on something never inserted through
queue_delayed_work() or schedule_delayed_work() is pointless.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
pdev->evtchn_irq = INVALID_EVTCHN_IRQ;
}
- /* If the driver domain started an op, make sure we complete it or
- * delete it before releasing the shared memory */
- cancel_delayed_work(&pdev->op_work);
- flush_scheduled_work();
+ /* If the driver domain started an op, make sure we complete it
+ * before releasing the shared memory */
+ flush_workqueue(pciback_wq);
if (pdev->sh_info != NULL) {
xenbus_unmap_ring_vfree(pdev->xdev, pdev->sh_area);
pcifront_free_roots(pdev);
/*For PCIE_AER error handling job*/
- cancel_delayed_work(&pdev->op_work);
flush_scheduled_work();
unbind_from_irqhandler(pdev->evtchn, pdev);