[openib-general] [PATCH 2/2] ib_cm: fix REJ due to invalid GID

Sean Hefty mshefty at ichips.intel.com
Tue Jul 18 10:09:22 PDT 2006


Arne Redlich wrote:
> @@ -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;
>  	}

An error here indicates that we were unable to allocate memory to record the 
incoming connection request.  I didn't send a reject in this case to allow it to 
be retried.  (The chances of being able to send a reject if this allocation 
fails is unlikely.)

If there's a need to send a reject in this case, we should call cm_issue_rej(). 
  I don't think that we can send one from cm_destroy_id() unless the cm_id has 
been initialized further.

> @@ -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);

Change to IB_CM_REJ_INVALID_GID.

> +		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);

IB_CM_REJ_INVALID_ALT_GID.

- Sean




More information about the general mailing list