OSDN Git Service

RDMA/iw_cxgb4: Always disconnect when QP is transitioning to TERMINATE state
authorPotnuri Bharat Teja <bharat@chelsio.com>
Tue, 2 Apr 2019 09:16:11 +0000 (14:46 +0530)
committerJason Gunthorpe <jgg@mellanox.com>
Thu, 4 Apr 2019 11:29:04 +0000 (08:29 -0300)
On receiving a TERM from tje peer, Host moves the QP to TERMINATE state
and then moves the adapter out of RDMA mode. After issuing a TERM, peer
issues a CLOSE and at this point of time if the connectivity between peer
and host is lost for a significant amount of time, the QP remains in
TERMINATE state.

Therefore c4iw_modify_qp() needs to initiate a close on entering terminate
state.

Signed-off-by: Potnuri Bharat Teja <bharat@chelsio.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/cxgb4/qp.c

index 7772314..63780e6 100644 (file)
@@ -1976,10 +1976,10 @@ int c4iw_modify_qp(struct c4iw_dev *rhp, struct c4iw_qp *qhp,
                        qhp->attr.layer_etype = attrs->layer_etype;
                        qhp->attr.ecode = attrs->ecode;
                        ep = qhp->ep;
+                       c4iw_get_ep(&ep->com);
+                       disconnect = 1;
                        if (!internal) {
-                               c4iw_get_ep(&qhp->ep->com);
                                terminate = 1;
-                               disconnect = 1;
                        } else {
                                terminate = qhp->attr.send_term;
                                ret = rdma_fini(rhp, qhp, ep);