tcp: In rack, we must only convert restored rtt when the hostcache does restore them.

Rack now after the previous commit is very careful to translate any
value in the hostcache for srtt/rttvar into its proper format. However
there is a snafu here in that if tp->srtt is 0 is the only time that
the HC will actually restore the srtt. We need to then only convert
the srtt restored when it is actually restored. We do this by making
sure it was zero before the call to cc_conn_init and it is non-zero
afterwards.

Reviewed by:	Michael Tuexen
Sponsored by: Netflix Inc
Differential Revision:	https://reviews.freebsd.org/D30213
This commit is contained in:
Randall Stewart 2021-05-11 08:15:05 -04:00
parent 0b103f7237
commit 4b86a24a76

View File

@ -6614,14 +6614,17 @@ static void
rack_cc_conn_init(struct tcpcb *tp)
{
struct tcp_rack *rack;
uint32_t srtt;
rack = (struct tcp_rack *)tp->t_fb_ptr;
srtt = tp->t_srtt;
cc_conn_init(tp);
/*
* Now convert to rack's internal format.
* Now convert to rack's internal format,
* if required.
*/
rack_convert_rtts(tp);
if ((srtt == 0) && (tp->t_srtt != 0))
rack_convert_rtts(tp);
/*
* We want a chance to stay in slowstart as
* we create a connection. TCP spec says that