[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