[rds-devel] rds_xx_process_recv() "fragmentation header mismatch"
Steve Wise
swise at opengridcomputing.com
Tue Feb 10 10:02:52 PST 2009
Andy Grover wrote:
> Steve Wise wrote:
>
>> Andy Grover wrote:
>>
>>> Steve Wise wrote:
>>>
>>>
>>>> Can someone explain why this code is here:
>>>> } else {
>>>> hdr = &iwinc->ii_inc.i_hdr;
>>>> /* We can't just use memcmp here; fragments of a
>>>> * single message may carry different ACKs */
>>>> if (hdr->h_sequence != ihdr->h_sequence
>>>> || hdr->h_len != ihdr->h_len
>>>> || hdr->h_sport != ihdr->h_sport
>>>> || hdr->h_dport != ihdr->h_dport) {
>>>> rds_iw_conn_error(conn,
>>>> "fragment header mismatch; forcing
>>>> reconnect\n");
>>>> return;
>>>> }
>>>> }
>>>>
>>>> I hit this sometimes when running rds-stress and the transport
>>>> connection hasn't yet been setup.
>>>>
>>>>
>>> Each message can be broken up into multiple fragments. All of a
>>> message's fragments are sent in-order before the next message is sent.
>>> While we've started to receive a message, we keep its state in iwinc.
>>> All the fragments must have the same header (except for ACK field), so
>>> this is verifying that fragments after the initial one have matching
>>> headers.
>>>
>>> Regards -- Andy
>>>
>>>
>> Under what conditions will these not all match every single time for an
>> RC QP transport?
>>
>
> Only when there's a bug, I'd think.
>
that's what I wanted to know. :)
More information about the rds-devel
mailing list