workqueue: make cancel_rearming_delayed_workqueue() work on idle dwork
[safe/jmp/linux-2.6] / kernel / workqueue.c
index 74f3f78..ce72d45 100644 (file)
@@ -569,6 +569,10 @@ EXPORT_SYMBOL(flush_work_keventd);
 void cancel_rearming_delayed_workqueue(struct workqueue_struct *wq,
                                       struct delayed_work *dwork)
 {
+       /* Was it ever queued ? */
+       if (!get_wq_data(&dwork->work))
+               return;
+
        while (!cancel_delayed_work(dwork))
                flush_workqueue(wq);
 }