SUNRPC: Prevent an rpc_task wakeup race
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 22 May 2013 16:57:24 +0000 (12:57 -0400)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 22 May 2013 18:55:32 +0000 (14:55 -0400)
commita3c3cac5d31879cd9ae2de7874dc6544ca704aec
treee6d14d14aaed37a5bc28a8a6ebd952a7a42f9aa6
parent774d5f14ee1ecac55f42a84ff35eb00b896b00b6
SUNRPC: Prevent an rpc_task wakeup race

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>
Cc: stable@vger.kernel.org
net/sunrpc/sched.c