]> git.hungrycats.org Git - linux/commitdiff
[PATCH] rpc_delete_timer race fix
authorAndrew Morton <akpm@digeo.com>
Sat, 8 Mar 2003 14:05:36 +0000 (06:05 -0800)
committerJames Bottomley <jejb@raven.il.steeleye.com>
Sat, 8 Mar 2003 14:05:36 +0000 (06:05 -0800)
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.

net/sunrpc/sched.c

index b36d08d5e71f0d46c12fef9c545b21f4de765c4c..87186b5fef42865c03f25d054ac6e93c3888f33e 100644 (file)
@@ -158,10 +158,8 @@ void rpc_add_timer(struct rpc_task *task, rpc_action timer)
 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);
-       }
 }
 
 /*