aboutsummaryrefslogtreecommitdiffstats
path: root/net/sunrpc/xprtrdma/rpc_rdma.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/sunrpc/xprtrdma/rpc_rdma.c')
-rw-r--r--net/sunrpc/xprtrdma/rpc_rdma.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/net/sunrpc/xprtrdma/rpc_rdma.c b/net/sunrpc/xprtrdma/rpc_rdma.c
index ac65b0cb66b2..77b84cfa5c77 100644
--- a/net/sunrpc/xprtrdma/rpc_rdma.c
+++ b/net/sunrpc/xprtrdma/rpc_rdma.c
@@ -716,6 +716,7 @@ rpcrdma_reply_handler(struct rpcrdma_rep *rep)
716 struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(xprt); 716 struct rpcrdma_xprt *r_xprt = rpcx_to_rdmax(xprt);
717 __be32 *iptr; 717 __be32 *iptr;
718 int rdmalen, status; 718 int rdmalen, status;
719 unsigned long cwnd;
719 720
720 /* Check status. If bad, signal disconnect and return rep to pool */ 721 /* Check status. If bad, signal disconnect and return rep to pool */
721 if (rep->rr_len == ~0U) { 722 if (rep->rr_len == ~0U) {
@@ -845,6 +846,11 @@ badheader:
845 break; 846 break;
846 } 847 }
847 848
849 cwnd = xprt->cwnd;
850 xprt->cwnd = atomic_read(&r_xprt->rx_buf.rb_credits) << RPC_CWNDSHIFT;
851 if (xprt->cwnd > cwnd)
852 xprt_release_rqst_cong(rqst->rq_task);
853
848 dprintk("RPC: %s: xprt_complete_rqst(0x%p, 0x%p, %d)\n", 854 dprintk("RPC: %s: xprt_complete_rqst(0x%p, 0x%p, %d)\n",
849 __func__, xprt, rqst, status); 855 __func__, xprt, rqst, status);
850 xprt_complete_rqst(rqst->rq_task, status); 856 xprt_complete_rqst(rqst->rq_task, status);