Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a76580fb authored by Trond Myklebust's avatar Trond Myklebust
Browse files

SUNRPC: Fix a potential race in rpc_execute



If the rpc_task is asynchronous, it could theoretically finish executing
on the workqueue it was assigned by rpc_make_runnable() before we get
round to testing RPC_IS_ASYNC() in rpc_execute.

In practice, however, all the existing callers hold a reference to the
rpc_task, so this can't happen today...

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 5cc2216d
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -825,9 +825,11 @@ static void __rpc_execute(struct rpc_task *task)
 */
void rpc_execute(struct rpc_task *task)
{
	bool is_async = RPC_IS_ASYNC(task);

	rpc_set_active(task);
	rpc_make_runnable(task);
	if (!RPC_IS_ASYNC(task))
	if (!is_async)
		__rpc_execute(task);
}