[openib-general] Question about QP's in timewait state and CM stale conn rejects

Or Gerlitz ogerlitz at voltaire.com
Sun Aug 20 04:45:19 PDT 2006


>>> +               } else
>>> +                       cm_issue_rej(work->port, work->mad_recv_wc,
>>> +                                    IB_CM_REJ_STALE_CONN, 
>>> CM_MSG_RESPONSE_REQ,
>>> +                                    NULL, 0);
>>
>>
>> what is this case? there is no <local_id,remote_id> entry but there is 
>> remote <id,ca_guid> or <qpn,ca_guid> entries???

> If we get here, this means that the REQ was a new REQ and not a 
> duplicate, but the remote_id or remote_qpn is already in use.  We need 
> to reject the new REQ as containing stale data.

I don't follow, if we get to the else case its as of cm_get_id() 
returning NULL. This holds when idr_find() returns NULL or when the 
entry returned is associated with a different remote_id, so what makes 
you to conclude that "the remote_id or remote_qpn is already in use"???

> +static struct cm_id_private * cm_get_id(__be32 local_id, __be32 remote_id)
> +{
> +       struct cm_id_private *cm_id_priv;
> +
> +       cm_id_priv = idr_find(&cm.local_id_table, (__force int) local_id);
> +       if (cm_id_priv) {
> +               if (cm_id_priv->id.remote_id == remote_id)
> +                       atomic_inc(&cm_id_priv->refcount);
> +               else
> +                       cm_id_priv = NULL;
> +       }
> +
> +       return cm_id_priv;
> +}

Or.





More information about the general mailing list