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

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

SUNRPC: Fix a race with XPRT_CONNECTING



Ensure that we clear XPRT_CONNECTING before releasing the XPRT_LOCK so that
we don't have races between the (asynchronous) socket setup code and
tasks in xprt_connect().

Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
Tested-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 0445f92c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -2090,8 +2090,8 @@ static void xs_udp_setup_socket(struct work_struct *work)
	trace_rpc_socket_connect(xprt, sock, 0);
	status = 0;
out:
	xprt_unlock_connect(xprt, transport);
	xprt_clear_connecting(xprt);
	xprt_unlock_connect(xprt, transport);
	xprt_wake_pending_tasks(xprt, status);
}

@@ -2327,8 +2327,8 @@ static void xs_tcp_setup_socket(struct work_struct *work)
	}
	status = -EAGAIN;
out:
	xprt_unlock_connect(xprt, transport);
	xprt_clear_connecting(xprt);
	xprt_unlock_connect(xprt, transport);
	xprt_wake_pending_tasks(xprt, status);
}