[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