SUNRPC: Prevent an rpc_task wakeup race
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 22 May 2013 16:57:24 +0000 (12:57 -0400)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 30 May 2013 13:35:04 +0000 (14:35 +0100)
commitf7b72b71fe00b5159d71f0d385c8d5e5865bcd32
treeefaa16d1b96ec549491db7cc4bc4f396bbe29fee
parenta27e05b0cf32d711c1ec57625b6053658efd11fc
SUNRPC: Prevent an rpc_task wakeup race

commit a3c3cac5d31879cd9ae2de7874dc6544ca704aec upstream.

The lockless RPC_IS_QUEUED() test in __rpc_execute means that we need to
be careful about ordering the calls to rpc_test_and_set_running(task) and
rpc_clear_queued(task). If we get the order wrong, then we may end up
testing the RPC_TASK_RUNNING flag after __rpc_execute() has looped
and changed the state of the rpc_task.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
net/sunrpc/sched.c