Commit 6cb28687 authored by Chuck Lever's avatar Chuck Lever Committed by Anna Schumaker
Browse files

xprtrdma: Wake tasks after connect worker fails



Pending tasks are currently never awoken when the connect worker
fails. The reason is that XPRT_CONNECTED is always clear after a
failure return of rpcrdma_ep_connect, thus the
xprt_test_and_clear_connected() check in xprt_rdma_connect_worker()
always fails.

- xprt_rdma_close always clears XPRT_CONNECTED.

- rpcrdma_ep_connect always clears XPRT_CONNECTED.

After reviewing the TCP connect worker, it appears that there's no
need for extra test_and_set paranoia in xprt_rdma_connect_worker.

Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 614f3c96
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -243,17 +243,14 @@ xprt_rdma_connect_worker(struct work_struct *work)
	rc = rpcrdma_ep_connect(&r_xprt->rx_ep, &r_xprt->rx_ia);
	xprt_clear_connecting(xprt);
	if (r_xprt->rx_ep.rep_connected > 0) {
		if (!xprt_test_and_set_connected(xprt)) {
		xprt->stat.connect_count++;
		xprt->stat.connect_time += (long)jiffies -
					   xprt->stat.connect_start;
			xprt_wake_pending_tasks(xprt, -EAGAIN);
		xprt_set_connected(xprt);
		rc = -EAGAIN;
	}
	} else {
		if (xprt_test_and_clear_connected(xprt))
	xprt_wake_pending_tasks(xprt, rc);
}
}

/**
 * xprt_rdma_inject_disconnect - inject a connection fault