xprtrdma: Revert commit e7104a2a9606 ('xprtrdma: Cap req_cqinit').
authorChuck Lever <chuck.lever@oracle.com>
Wed, 16 Dec 2015 22:23:20 +0000 (17:23 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Fri, 18 Dec 2015 20:34:33 +0000 (15:34 -0500)
The root of the problem was that sends (especially unsignalled
FASTREG and LOCAL_INV Work Requests) were not properly flow-
controlled, which allowed a send queue overrun.

Now that the RPC/RDMA reply handler waits for invalidation to
complete, the send queue is properly flow-controlled. Thus this
limit is no longer necessary.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Tested-by: Devesh Sharma <devesh.sharma@avagotech.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/xprtrdma/verbs.c
net/sunrpc/xprtrdma/xprt_rdma.h

index 0036307..732c71c 100644 (file)
@@ -616,10 +616,8 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, struct rpcrdma_ia *ia,
 
        /* set trigger for requesting send completion */
        ep->rep_cqinit = ep->rep_attr.cap.max_send_wr/2 - 1;
-       if (ep->rep_cqinit > RPCRDMA_MAX_UNSIGNALED_SENDS)
-               ep->rep_cqinit = RPCRDMA_MAX_UNSIGNALED_SENDS;
-       else if (ep->rep_cqinit <= 2)
-               ep->rep_cqinit = 0;
+       if (ep->rep_cqinit <= 2)
+               ep->rep_cqinit = 0;     /* always signal? */
        INIT_CQCOUNT(ep);
        init_waitqueue_head(&ep->rep_connect_wait);
        INIT_DELAYED_WORK(&ep->rep_connect_worker, rpcrdma_connect_worker);
index ddae490..728101d 100644 (file)
@@ -88,12 +88,6 @@ struct rpcrdma_ep {
        struct delayed_work     rep_connect_worker;
 };
 
-/*
- * Force a signaled SEND Work Request every so often,
- * in case the provider needs to do some housekeeping.
- */
-#define RPCRDMA_MAX_UNSIGNALED_SENDS   (32)
-
 #define INIT_CQCOUNT(ep) atomic_set(&(ep)->rep_cqcount, (ep)->rep_cqinit)
 #define DECR_CQCOUNT(ep) atomic_sub_return(1, &(ep)->rep_cqcount)