From c4afeac936f254f348ba94dfb17ec36f6454c523 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Mon, 21 May 2007 17:38:02 -0700 Subject: [PATCH] --- yaml --- r: 57087 b: refs/heads/master c: d998ccce020e2cfcf11c6b57503532930ede2894 h: refs/heads/master i: 57085: e0e92625d81f0f5e83c7062b9278717d6af1682f 57083: 99eb82fe1351aa5ed41b13972d4d0606f6503576 57079: 6bb69d6c15cfcf207c38dd3102f150ae81eab8b5 57071: 2a06e24cf6e2a5de0bfa66f1e975207e39f57ce0 57055: 8a48ba73f3e84c073a7341868634252bdd65fd37 57023: eb475033c93551965dcd135912ade1e837f14748 56959: 50ef9f1d05b65866f26f81f9681d464be5b13e13 56831: d641ca083d62e25aba6c30065b1ec4ebcecc2ebb v: v3 --- [refs] | 2 +- trunk/drivers/infiniband/core/cm.c | 25 ++++++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 2df5174d4b71..4514e70fd29b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ec56dc0b7f6c3fec20bbc2e98ff1a06edf2fc9b9 +refs/heads/master: d998ccce020e2cfcf11c6b57503532930ede2894 diff --git a/trunk/drivers/infiniband/core/cm.c b/trunk/drivers/infiniband/core/cm.c index e840434a96d8..40c004a2697e 100644 --- a/trunk/drivers/infiniband/core/cm.c +++ b/trunk/drivers/infiniband/core/cm.c @@ -1297,26 +1297,29 @@ static struct cm_id_private * cm_match_req(struct cm_work *work, req_msg = (struct cm_req_msg *)work->mad_recv_wc->recv_buf.mad; - /* Check for duplicate REQ and stale connections. */ + /* Check for possible duplicate REQ. */ spin_lock_irqsave(&cm.lock, flags); timewait_info = cm_insert_remote_id(cm_id_priv->timewait_info); - if (!timewait_info) - timewait_info = cm_insert_remote_qpn(cm_id_priv->timewait_info); - if (timewait_info) { cur_cm_id_priv = cm_get_id(timewait_info->work.local_id, timewait_info->work.remote_id); - cm_cleanup_timewait(cm_id_priv->timewait_info); spin_unlock_irqrestore(&cm.lock, flags); if (cur_cm_id_priv) { cm_dup_req_handler(work, cur_cm_id_priv); cm_deref_id(cur_cm_id_priv); - } else - cm_issue_rej(work->port, work->mad_recv_wc, - IB_CM_REJ_STALE_CONN, CM_MSG_RESPONSE_REQ, - NULL, 0); - listen_cm_id_priv = NULL; - goto out; + } + return NULL; + } + + /* Check for stale connections. */ + timewait_info = cm_insert_remote_qpn(cm_id_priv->timewait_info); + if (timewait_info) { + cm_cleanup_timewait(cm_id_priv->timewait_info); + spin_unlock_irqrestore(&cm.lock, flags); + cm_issue_rej(work->port, work->mad_recv_wc, + IB_CM_REJ_STALE_CONN, CM_MSG_RESPONSE_REQ, + NULL, 0); + return NULL; } /* Find matching listen request. */