IB/cm: Do not automatically disconnect XRC TGT QPs
authorSean Hefty <sean.hefty@intel.com>
Tue, 31 May 2011 05:30:46 +0000 (22:30 -0700)
committerRoland Dreier <roland@purestorage.com>
Thu, 13 Oct 2011 16:42:06 +0000 (09:42 -0700)
Because an XRC TGT QP can end up being shared among multiple
processes, don't have the ib_cm automatically send a DREQ when the
userspace process that owns the ib_cm_id exits.  Disconnect can be
initiated by the user directly; otherwise, the owner of the XRC INI QP
controls the connection.

Note that as a result of the process exiting, the ib_cm will stop
tracking the XRC connection on the target side.  For the purposes of
disconnecting, this isn't a big deal.  The ib_cm will respond to the
DREQ appropriately.  For other messages, mainly LAP, the CM will
reject the request, since there's no one available to route the
request to.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/core/cm.c

index 42a7a9bae44efb81c60951f493cfb101be31c336..4104ea2427c24dd935a265a0d0148cc6e871d6ca 100644 (file)
@@ -889,6 +889,8 @@ retest:
                break;
        case IB_CM_ESTABLISHED:
                spin_unlock_irq(&cm_id_priv->lock);
+               if (cm_id_priv->qp_type == IB_QPT_XRC_TGT)
+                       break;
                ib_send_cm_dreq(cm_id, NULL, 0);
                goto retest;
        case IB_CM_DREQ_SENT: