diff options
Diffstat (limited to 'net/sunrpc/xprtrdma/rpc_rdma.c')
-rw-r--r-- | net/sunrpc/xprtrdma/rpc_rdma.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c index 1776e5731dcf..558fbab574f0 100644 --- a/net/sunrpc/xprtrdma/rpc_rdma.c +++ b/net/sunrpc/xprtrdma/rpc_rdma.c | |||
@@ -771,13 +771,18 @@ repost: | |||
771 | 771 | ||
772 | /* get request object */ | 772 | /* get request object */ |
773 | req = rpcr_to_rdmar(rqst); | 773 | req = rpcr_to_rdmar(rqst); |
774 | if (req->rl_reply) { | ||
775 | spin_unlock(&xprt->transport_lock); | ||
776 | dprintk("RPC: %s: duplicate reply 0x%p to RPC " | ||
777 | "request 0x%p: xid 0x%08x\n", __func__, rep, req, | ||
778 | headerp->rm_xid); | ||
779 | goto repost; | ||
780 | } | ||
774 | 781 | ||
775 | dprintk("RPC: %s: reply 0x%p completes request 0x%p\n" | 782 | dprintk("RPC: %s: reply 0x%p completes request 0x%p\n" |
776 | " RPC request 0x%p xid 0x%08x\n", | 783 | " RPC request 0x%p xid 0x%08x\n", |
777 | __func__, rep, req, rqst, headerp->rm_xid); | 784 | __func__, rep, req, rqst, headerp->rm_xid); |
778 | 785 | ||
779 | BUG_ON(!req || req->rl_reply); | ||
780 | |||
781 | /* from here on, the reply is no longer an orphan */ | 786 | /* from here on, the reply is no longer an orphan */ |
782 | req->rl_reply = rep; | 787 | req->rl_reply = rep; |
783 | 788 | ||