Patch from Ulrich Weigand <weigand@immd1.informatik.uni-erlangen.de>
Fix a race wherein timer_pending() returns false, but the timer handler is
actually running on another CPU. We need to call del_timer_sync()
regardless, so we wait for completion of the handler.
static inline void
rpc_delete_timer(struct rpc_task *task)
{
- if (timer_pending(&task->tk_timer)) {
+ if (del_timer_sync(&task->tk_timer))
dprintk("RPC: %4d deleting timer\n", task->tk_pid);
- del_timer_sync(&task->tk_timer);
- }
}
/*