|
@@ -835,6 +835,11 @@ retest:
|
|
case IB_CM_SIDR_REQ_RCVD:
|
|
case IB_CM_SIDR_REQ_RCVD:
|
|
spin_unlock_irq(&cm_id_priv->lock);
|
|
spin_unlock_irq(&cm_id_priv->lock);
|
|
cm_reject_sidr_req(cm_id_priv, IB_SIDR_REJECT);
|
|
cm_reject_sidr_req(cm_id_priv, IB_SIDR_REJECT);
|
|
|
|
+ spin_lock_irq(&cm.lock);
|
|
|
|
+ if (!RB_EMPTY_NODE(&cm_id_priv->sidr_id_node))
|
|
|
|
+ rb_erase(&cm_id_priv->sidr_id_node,
|
|
|
|
+ &cm.remote_sidr_table);
|
|
|
|
+ spin_unlock_irq(&cm.lock);
|
|
break;
|
|
break;
|
|
case IB_CM_REQ_SENT:
|
|
case IB_CM_REQ_SENT:
|
|
case IB_CM_MRA_REQ_RCVD:
|
|
case IB_CM_MRA_REQ_RCVD:
|
|
@@ -3172,7 +3177,10 @@ int ib_send_cm_sidr_rep(struct ib_cm_id *cm_id,
|
|
spin_unlock_irqrestore(&cm_id_priv->lock, flags);
|
|
spin_unlock_irqrestore(&cm_id_priv->lock, flags);
|
|
|
|
|
|
spin_lock_irqsave(&cm.lock, flags);
|
|
spin_lock_irqsave(&cm.lock, flags);
|
|
- rb_erase(&cm_id_priv->sidr_id_node, &cm.remote_sidr_table);
|
|
|
|
|
|
+ if (!RB_EMPTY_NODE(&cm_id_priv->sidr_id_node)) {
|
|
|
|
+ rb_erase(&cm_id_priv->sidr_id_node, &cm.remote_sidr_table);
|
|
|
|
+ RB_CLEAR_NODE(&cm_id_priv->sidr_id_node);
|
|
|
|
+ }
|
|
spin_unlock_irqrestore(&cm.lock, flags);
|
|
spin_unlock_irqrestore(&cm.lock, flags);
|
|
return 0;
|
|
return 0;
|
|
|
|
|