]> git.openfabrics.org - ~emulex/compat-rdma_3.12.git/commitdiff
Fixed nfsrdma compilation issue on RHEL6.4 errata kernel
authorVladimir Sokolovsky <vlad@mellanox.com>
Wed, 20 Nov 2013 11:26:57 +0000 (13:26 +0200)
committerVladimir Sokolovsky <vlad@mellanox.com>
Wed, 20 Nov 2013 11:26:57 +0000 (13:26 +0200)
http://bugs.openfabrics.org/bugzilla/show_bug.cgi?id=2453
issue: 2453

Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
linux-next-cherry-picks/0013-SUNRPC-Get-rid-of-the-redundant-xprt-shutdown-bit-fi.patch [new file with mode: 0644]

diff --git a/linux-next-cherry-picks/0013-SUNRPC-Get-rid-of-the-redundant-xprt-shutdown-bit-fi.patch b/linux-next-cherry-picks/0013-SUNRPC-Get-rid-of-the-redundant-xprt-shutdown-bit-fi.patch
new file mode 100644 (file)
index 0000000..0b33ee2
--- /dev/null
@@ -0,0 +1,49 @@
+From: Trond Myklebust <Trond.Myklebust@netapp.com>
+Subject: [PATCH] SUNRPC: Get rid of the redundant xprt->shutdown bit field
+
+It is only set after everyone has dereferenced the transport,
+and serves no useful purpose: setting it is racy, so all the
+socket code, etc still needs to be able to cope with the cases
+where they miss reading it.
+
+Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
+---
+ net/sunrpc/xprtrdma/transport.c |   21 ++++++++-------------
+ 1 files changed, 8 insertions(+), 13 deletions(-)
+
+diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
+index xxxxxxx..xxxxxxx xxxxxx
+--- a/net/sunrpc/xprtrdma/transport.c
++++ b/net/sunrpc/xprtrdma/transport.c
+@@ -199,23 +199,18 @@ xprt_rdma_connect_worker(struct work_struct *work)
+       struct rpc_xprt *xprt = &r_xprt->xprt;
+       int rc = 0;
+-      if (!xprt->shutdown) {
+-              xprt_clear_connected(xprt);
+-
+-              dprintk("RPC:       %s: %sconnect\n", __func__,
+-                              r_xprt->rx_ep.rep_connected != 0 ? "re" : "");
+-              rc = rpcrdma_ep_connect(&r_xprt->rx_ep, &r_xprt->rx_ia);
+-              if (rc)
+-                      goto out;
+-      }
+-      goto out_clear;
++      current->flags |= PF_FSTRANS;
++      xprt_clear_connected(xprt);
+-out:
+-      xprt_wake_pending_tasks(xprt, rc);
++      dprintk("RPC:       %s: %sconnect\n", __func__,
++                      r_xprt->rx_ep.rep_connected != 0 ? "re" : "");
++      rc = rpcrdma_ep_connect(&r_xprt->rx_ep, &r_xprt->rx_ia);
++      if (rc)
++              xprt_wake_pending_tasks(xprt, rc);
+-out_clear:
+       dprintk("RPC:       %s: exit\n", __func__);
+       xprt_clear_connecting(xprt);
++      current->flags &= ~PF_FSTRANS;
+ }
+ /*