SUNRPC: Tighten up the task locking rules in __rpc_execute()
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 11 Mar 2009 00:33:16 +0000 (20:33 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 11 Mar 2009 00:33:16 +0000 (20:33 -0400)
commiteb9b55ab4d73280597fd183b367d50452f4d7846
tree80e0c4e5315ea5fd18bb5ba9d37ec5f77170631a
parent16b71fdf97599f1b1b7f38418ee9922d9f117396
SUNRPC: Tighten up the task locking rules in __rpc_execute()

We should probably not be testing any flags after we've cleared the
RPC_TASK_RUNNING flag, since rpc_make_runnable() is then free to assign the
rpc_task to another workqueue, which may then destroy it.

We can fix any races with rpc_make_runnable() by ensuring that we only
clear the RPC_TASK_RUNNING flag while holding the rpc_wait_queue->lock that
the task is supposed to be sleeping on (and then checking whether or not
the task really is sleeping).

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
net/sunrpc/sched.c