Reject a REQ containing invalid GID(s) with appropriate reason codes instead of IB_CM_CONSUMER_REJ.
Signed-off-by: Arne Redlich <[EMAIL PROTECTED]> Index: infiniband/core/cm.c =================================================================== --- infiniband/core/cm.c (revision 8556) +++ infiniband/core/cm.c (working copy) @@ -1337,7 +1337,7 @@ static int cm_req_handler(struct cm_work struct ib_cm_id *cm_id; struct cm_id_private *cm_id_priv, *listen_cm_id_priv; struct cm_req_msg *req_msg; - int ret; + int ret, reject; req_msg = (struct cm_req_msg *)work->mad_recv_wc->recv_buf.mad; @@ -1354,6 +1354,7 @@ static int cm_req_handler(struct cm_work id.local_id); if (IS_ERR(cm_id_priv->timewait_info)) { ret = PTR_ERR(cm_id_priv->timewait_info); + reject = 1; goto error1; } cm_id_priv->timewait_info->work.remote_id = req_msg->local_comm_id; @@ -1363,6 +1364,7 @@ static int cm_req_handler(struct cm_work listen_cm_id_priv = cm_match_req(work, cm_id_priv); if (!listen_cm_id_priv) { ret = -EINVAL; + reject = 0; goto error2; } @@ -1373,12 +1375,21 @@ static int cm_req_handler(struct cm_work cm_format_paths_from_req(req_msg, &work->path[0], &work->path[1]); ret = cm_init_av_by_path(&work->path[0], &cm_id_priv->av); - if (ret) + if (ret) { + cm_issue_rej(work->port, work->mad_recv_wc, IB_CM_INVALID_GID, + CM_MSG_RESPONSE_REQ, NULL, 0); + reject = 0; goto error3; + } if (req_msg->alt_local_lid) { ret = cm_init_av_by_path(&work->path[1], &cm_id_priv->alt_av); - if (ret) + if (ret) { + cm_issue_rej(work->port, work->mad_recv_wc, + IB_CM_INVALID_ALT_GID, CM_MSG_RESPONSE_REQ, + NULL, 0); + reject = 0; goto error3; + } } cm_id_priv->tid = req_msg->hdr.tid; cm_id_priv->timeout_ms = cm_convert_to_ms( @@ -1405,7 +1416,7 @@ error3: atomic_dec(&cm_id_priv->refcount cm_cleanup_timewait(cm_id_priv->timewait_info); error2: kfree(cm_id_priv->timewait_info); cm_id_priv->timewait_info = NULL; -error1: ib_destroy_cm_id(&cm_id_priv->id); +error1: cm_destroy_id(&cm_id_priv->id, reject); return ret; } _______________________________________________ openib-general mailing list openib-general@openib.org http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general