diff --git a/sys/netinet/tcp_stacks/rack.c b/sys/netinet/tcp_stacks/rack.c --- a/sys/netinet/tcp_stacks/rack.c +++ b/sys/netinet/tcp_stacks/rack.c @@ -12610,14 +12610,11 @@ rsm->r_rtr_bytes = 0; if (tp->t_flags & TF_SENTFIN) rsm->r_flags |= RACK_HAS_FIN; - rsm->r_end = tp->snd_max; - if (tp->snd_una == tp->iss) { - /* The data space is one beyond snd_una */ + if ((tp->snd_una == tp->iss) && + !TCPS_HAVEESTABLISHED(tp->t_state)) rsm->r_flags |= RACK_HAS_SYN; - rsm->r_start = tp->iss; - rsm->r_end = rsm->r_start + (tp->snd_max - tp->snd_una); - } else - rsm->r_start = tp->snd_una; + rsm->r_start = tp->snd_una; + rsm->r_end = tp->snd_max; rsm->r_dupack = 0; if (rack->rc_inp->inp_socket->so_snd.sb_mb != NULL) { rsm->m = sbsndmbuf(&rack->rc_inp->inp_socket->so_snd, 0, &rsm->soff);