OSDN Git Service

xprtrdma: Remove xprt-specific connect cookie
authorChuck Lever <chuck.lever@oracle.com>
Wed, 28 Feb 2018 20:30:38 +0000 (15:30 -0500)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Tue, 10 Apr 2018 20:06:22 +0000 (16:06 -0400)
Clean up: The generic rq_connect_cookie is sufficient to detect RPC
Call retransmission.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/xprtrdma/transport.c
net/sunrpc/xprtrdma/verbs.c
net/sunrpc/xprtrdma/xprt_rdma.h

index f86021e..47b4604 100644 (file)
@@ -236,8 +236,6 @@ rpcrdma_connect_worker(struct work_struct *work)
        struct rpc_xprt *xprt = &r_xprt->rx_xprt;
 
        spin_lock_bh(&xprt->transport_lock);
-       if (++xprt->connect_cookie == 0)        /* maintain a reserved value */
-               ++xprt->connect_cookie;
        if (ep->rep_connected > 0) {
                if (!xprt_test_and_set_connected(xprt))
                        xprt_wake_pending_tasks(xprt, 0);
@@ -650,7 +648,6 @@ xprt_rdma_allocate(struct rpc_task *task)
        if (!rpcrdma_get_recvbuf(r_xprt, req, rqst->rq_rcvsize, flags))
                goto out_fail;
 
-       req->rl_connect_cookie = 0;     /* our reserved value */
        rpcrdma_set_xprtdata(rqst, req);
        rqst->rq_buffer = req->rl_sendbuf->rg_base;
        rqst->rq_rbuffer = req->rl_recvbuf->rg_base;
@@ -721,9 +718,8 @@ xprt_rdma_send_request(struct rpc_task *task)
                rpcrdma_recv_buffer_get(req);
 
        /* Must suppress retransmit to maintain credits */
-       if (req->rl_connect_cookie == xprt->connect_cookie)
+       if (rqst->rq_connect_cookie == xprt->connect_cookie)
                goto drop_connection;
-       req->rl_connect_cookie = xprt->connect_cookie;
 
        __set_bit(RPCRDMA_REQ_F_PENDING, &req->rl_flags);
        if (rpcrdma_ep_post(&r_xprt->rx_ia, &r_xprt->rx_ep, req))
index 7cc3465..520e7e4 100644 (file)
@@ -255,6 +255,7 @@ rpcrdma_conn_upcall(struct rdma_cm_id *id, struct rdma_cm_event *event)
                /* Return 1 to ensure the core destroys the id. */
                return 1;
        case RDMA_CM_EVENT_ESTABLISHED:
+               ++xprt->rx_xprt.connect_cookie;
                connstate = 1;
                rpcrdma_update_connect_private(xprt, &event->param.conn);
                goto connected;
@@ -273,6 +274,7 @@ rpcrdma_conn_upcall(struct rdma_cm_id *id, struct rdma_cm_event *event)
                        connstate = -EAGAIN;
                goto connected;
        case RDMA_CM_EVENT_DISCONNECTED:
+               ++xprt->rx_xprt.connect_cookie;
                connstate = -ECONNABORTED;
 connected:
                xprt->rx_buf.rb_credits = 1;
index 430a6de..29ea0b4 100644 (file)
@@ -334,7 +334,6 @@ enum {
 struct rpcrdma_buffer;
 struct rpcrdma_req {
        struct list_head        rl_list;
-       unsigned int            rl_connect_cookie;
        struct rpcrdma_buffer   *rl_buffer;
        struct rpcrdma_rep      *rl_reply;
        struct xdr_stream       rl_stream;