2008-05-19 03:49:18

by Peter Leckie

[permalink] [raw]
Subject: Re: [PATCH 03/04] NFS/RDMA client stall patches

This patch changes rpcrdma_conn_func() to directly call
xprt_disconnect() instead of directly waking the pending
task queue. It's also changes to more closely match the
tcp equivalent function.

Signed-off-by: Peter Leckie <pleckie-cP1dWloDopni96+mSzHFpQC/[email protected]>
Reviewed-by: Greg Banks <gnb-cP1dWloDopni96+mSzHFpQC/[email protected]>
X-Sgi-Pv: 970244
<http://bugworks/query.cgi/970244>---
Index: linux-2.6.25.3/net/sunrpc/xprtrdma/rpc_rdma.c
===================================================================
--- linux-2.6.25.3.orig/net/sunrpc/xprtrdma/rpc_rdma.c
+++ linux-2.6.25.3/net/sunrpc/xprtrdma/rpc_rdma.c
@@ -680,15 +680,13 @@ rpcrdma_conn_func(struct rpcrdma_ep *ep)
{
struct rpc_xprt *xprt = ep->rep_xprt;

- spin_lock_bh(&xprt->transport_lock);
if (ep->rep_connected > 0) {
+ spin_lock_bh(&xprt->transport_lock);
if (!xprt_test_and_set_connected(xprt))
xprt_wake_pending_tasks(xprt, 0);
- } else {
- if (xprt_test_and_clear_connected(xprt))
- xprt_wake_pending_tasks(xprt, ep->rep_connected);
- }
- spin_unlock_bh(&xprt->transport_lock);
+ spin_unlock_bh(&xprt->transport_lock);
+ } else
+ xprt_disconnect(xprt);
}

/*