xprtrdma: The transport should not bug-check when a dup reply is received
authorTom Tucker <tom@ogc.us>
Mon, 20 Feb 2012 19:07:42 +0000 (13:07 -0600)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Wed, 21 Mar 2012 13:31:47 +0000 (09:31 -0400)
The client side RDMA transport will bug check if it receives a duplicate
reply, instead we should simply drop the duplicate reply.

Signed-off-by: Tom Tucker <tom@ogc.us>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
net/sunrpc/xprtrdma/rpc_rdma.c

index 554d0814c8750231472a64e5097132eef7abb55f..12de982b7a505fc1e852606615cb1e427f925be5 100644 (file)
@@ -771,13 +771,18 @@ repost:
 
        /* get request object */
        req = rpcr_to_rdmar(rqst);
+       if (req->rl_reply) {
+               spin_unlock(&xprt->transport_lock);
+               dprintk("RPC:       %s: duplicate reply 0x%p to RPC "
+                       "request 0x%p: xid 0x%08x\n", __func__, rep, req,
+                       headerp->rm_xid);
+               goto repost;
+       }
 
        dprintk("RPC:       %s: reply 0x%p completes request 0x%p\n"
                "                   RPC request 0x%p xid 0x%08x\n",
                        __func__, rep, req, rqst, headerp->rm_xid);
 
-       BUG_ON(!req || req->rl_reply);
-
        /* from here on, the reply is no longer an orphan */
        req->rl_reply = rep;