Re: workqueue and pending

From: Mikkel Christiansen
Date: Tue May 04 2004 - 08:36:17 EST


I tried the patch and it works fine

-Mikkel

Andrew Morton wrote:

Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx> wrote:





@@ -75,8 +76,11 @@ extern void init_workqueues(void);
*/
static inline int cancel_delayed_work(struct work_struct *work)
{
- return del_timer_sync(&work->timer);
+ int ret;
+
+ ret = del_timer_sync(&work->timer);
+ clear_bit(0, &work->pending);
+ return ret;
}



Looks wrong to me. The time may have fired already and queued the
work. Clearing pending is an error in this case since the work is
indeed pending for execution....


OK...

--- 25/include/linux/workqueue.h~cancel_delayed_work-fix 2004-05-03 20:14:26.796321416 -0700
+++ 25-akpm/include/linux/workqueue.h 2004-05-03 20:15:41.010039216 -0700
@@ -7,6 +7,7 @@

#include <linux/timer.h>
#include <linux/linkage.h>
+#include <linux/bitops.h>

struct workqueue_struct;

@@ -75,8 +76,12 @@ extern void init_workqueues(void);
*/
static inline int cancel_delayed_work(struct work_struct *work)
{
- return del_timer_sync(&work->timer);
+ int ret;
+
+ ret = del_timer_sync(&work->timer);
+ if (ret)
+ clear_bit(0, &work->pending);
+ return ret;
}

#endif
-

_

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/