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

Michael S. Tsirkin mst at mellanox.co.il
Tue Jul 18 07:43:59 PDT 2006


Quoting r. Arne Redlich <arne.redlich at xiranet.com>:
> Reject a REQ containing invalid GID(s) with appropriate reason codes
> instead of IB_CM_CONSUMER_REJ.
> 
> Signed-off-by: Arne Redlich <arne.redlich at xiranet.com>

Are there actual applications that can use the exact reject status?  I also
wander what should the status be if there are multiple errors in a REQ.

> @@ -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;
> +		}
>  	}

Hmm ... it looks like cm_init_av_by_path can also fail if ib_find_cached_pkey
returns an error - is it right that your patch will return invalid gid
in this case?

Maybe the right thing to do is to
1. Make cm_init_av_by_path return a more specific error in case of GID mismatch.
   ENXIO might be a good fit, but we can always add our own
2. Teach cm_destroy_id to send invalid gid reject on this error


-- 
MST




More information about the general mailing list