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

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

SUNRPC: Ensure we always run the tk_callback before tk_action



This fixes a race in which the task->tk_callback() puts the rpc_task
to sleep, setting a new callback. Under certain circumstances, the current
code may end up executing the task->tk_action before it gets round to the
callback.

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
Cc: stable@kernel.org
parent 986d4abb
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -630,14 +630,12 @@ static void __rpc_execute(struct rpc_task *task)
			save_callback = task->tk_callback;
			task->tk_callback = NULL;
			save_callback(task);
		}

		} else {
			/*
			 * Perform the next FSM step.
			 * tk_action may be NULL when the task has been killed
			 * by someone else.
			 */
		if (!RPC_IS_QUEUED(task)) {
			if (task->tk_action == NULL)
				break;
			task->tk_action(task);