Skip to contentSkip to conversation

IWCM: Don't call provider reject func with irqs disabled

PATCH In review Steve Wise 2 participants 2 messages Sep 29, 2009 – Oct 7, 2009 1 message not in the archive InfiniBand

lore
Share & tools
lore

Steve Wise

author
#0 lore raw

PATCH v2 1/1 IWCM: Don't call provider reject func with irqs disabled

Recently a call to the provider's reject handler was added to destroy_cm_id() to fix a provider endpoint leak. This call needs to be done outside of irq disablement. So unlock and relock around this call. This is safe because:

1) the provider will do nothing with this endpoint until the iwcm either accepts or rejects.

2) the lock is only released after the iwcm state is changed, so an errant iwcm app that is destroying -and- rejecting the connection concurrently will get a failure on one of the calls.

---

 drivers/infiniband/core/iwcm.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
drivers/infiniband/core/iwcm.c +2 -0
index 55d093a..625fec5 100644
@@ -362,7 +362,9 @@ static void destroy_cm_id(struct iw_cm_id *cm_id)
 		 * In either case, must tell the provider to reject.
 		 */
 		cm_id_priv->state = IW_CM_STATE_DESTROYING;
+		spin_unlock_irqrestore(&cm_id_priv->lock, flags);
 		cm_id->device->iwcm->reject(cm_id, NULL, 0);
+		spin_lock_irqsave(&cm_id_priv->lock, flags);
 		break;
 	case IW_CM_STATE_CONN_SENT:
 	case IW_CM_STATE_DESTROYING:

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

A message that is not in the archive (sent off-list or not yet received): 20090929184152.16572.60582.stgit-T4OLL4TyM9aNDNWfRnPdfg@public.gmane.org