Skip to content

Commit

Permalink
workqueue: cancel_delayed_work() should return %false if work item is…
Browse files Browse the repository at this point in the history
… idle

57b30ae ("workqueue: reimplement cancel_delayed_work() using
try_to_grab_pending()") made cancel_delayed_work() always return %true
unless someone else is also trying to cancel the work item, which is
broken - if the target work item is idle, the return value should be
%false.

try_to_grab_pending() indicates that the target work item was idle by
zero return value.  Use it for return.  Note that this brings
cancel_delayed_work() in line with __cancel_work_timer() in return
value handling.

Signed-off-by: Dan Magenheimer <dan.magenheimer@oracle.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
LKML-Reference: <444a6439-b1a4-4740-9e7e-bc37267cfe73@default>
  • Loading branch information
Dan Magenheimer authored and htejun committed Oct 24, 2012
1 parent ddffeb8 commit c0158ca
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion kernel/workqueue.c
Original file line number Diff line number Diff line change
Expand Up @@ -2982,7 +2982,7 @@ bool cancel_delayed_work(struct delayed_work *dwork)

set_work_cpu_and_clear_pending(&dwork->work, work_cpu(&dwork->work));
local_irq_restore(flags);
return true;
return ret;
}
EXPORT_SYMBOL(cancel_delayed_work);

Expand Down

0 comments on commit c0158ca

Please sign in to comment.