[rds-devel] rds_xx_process_recv() "fragmentation header mismatch"

Andy Grover andy.grover at oracle.com
Tue Feb 10 09:56:34 PST 2009


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



More information about the rds-devel mailing list