From: James Bottomley This was unexported by Arjan because we have no current users. However, during a conversion from tasklets to workqueues of the parisc led functions, we ran across a case where this was needed. In particular, the open coded equivalent of cancel_rearming_delayed_workqueue was implemented incorrectly, which is, I think, all the evidence necessary that this is a useful API. Signed-off-by: James Bottomley Signed-off-by: Andrew Morton --- 25-akpm/include/linux/workqueue.h | 2 ++ 25-akpm/kernel/workqueue.c | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff -puN include/linux/workqueue.h~re-export-cancel_rearming_delayed_workqueue include/linux/workqueue.h --- 25/include/linux/workqueue.h~re-export-cancel_rearming_delayed_workqueue 2005-04-10 15:37:21.000000000 -0700 +++ 25-akpm/include/linux/workqueue.h 2005-04-10 15:37:21.000000000 -0700 @@ -71,6 +71,8 @@ extern int keventd_up(void); extern void init_workqueues(void); void cancel_rearming_delayed_work(struct work_struct *work); +void cancel_rearming_delayed_workqueue(struct workqueue_struct *, + struct work_struct *); /* * Kill off a pending schedule_delayed_work(). Note that the work callback diff -puN kernel/workqueue.c~re-export-cancel_rearming_delayed_workqueue kernel/workqueue.c --- 25/kernel/workqueue.c~re-export-cancel_rearming_delayed_workqueue 2005-04-10 15:37:21.000000000 -0700 +++ 25-akpm/kernel/workqueue.c 2005-04-10 15:37:21.000000000 -0700 @@ -429,12 +429,13 @@ void flush_scheduled_work(void) * @wq: the controlling workqueue structure * @work: the delayed work struct */ -static void cancel_rearming_delayed_workqueue(struct workqueue_struct *wq, - struct work_struct *work) +void cancel_rearming_delayed_workqueue(struct workqueue_struct *wq, + struct work_struct *work) { while (!cancel_delayed_work(work)) flush_workqueue(wq); } +EXPORT_SYMBOL(cancel_rearming_delayed_workqueue); /** * cancel_rearming_delayed_work - reliably kill off a delayed keventd _