[rds-devel] rds_xx_process_recv() "fragmentation header mismatch"
Andy Grover
andy.grover at oracle.com
Tue Feb 10 10:01:14 PST 2009
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.
More information about the rds-devel
mailing list