From: Vladimir Sokolovsky Date: Wed, 20 Nov 2013 11:26:57 +0000 (+0200) Subject: Fixed nfsrdma compilation issue on RHEL6.4 errata kernel X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=d08aa7350183028278dbe18a331cedc011e77915;p=~emulex%2Ffor-vlad%2Fcompat-rdma.git Fixed nfsrdma compilation issue on RHEL6.4 errata kernel http://bugs.openfabrics.org/bugzilla/show_bug.cgi?id=2453 issue: 2453 Signed-off-by: Vladimir Sokolovsky --- 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 index 0000000..0b33ee2 --- /dev/null +++ b/linux-next-cherry-picks/0013-SUNRPC-Get-rid-of-the-redundant-xprt-shutdown-bit-fi.patch @@ -0,0 +1,49 @@ +From: Trond Myklebust +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 +--- + 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; + } + + /*