aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandall Stewart <rrs@FreeBSD.org>2021-05-11 12:15:05 +0000
committerRandall Stewart <rrs@FreeBSD.org>2021-05-11 12:15:05 +0000
commit4b86a24a76a4d58c1d870fcb2252b321f61cb3cc (patch)
tree063cb12ab7a28d2ed4628a402e5a4abf2ec9c0b9
parent0b103f72376b5ec7c9a9d574c976e42805ae88a4 (diff)
downloadsrc-4b86a24a76a4d58c1d870fcb2252b321f61cb3cc.tar.gz
src-4b86a24a76a4d58c1d870fcb2252b321f61cb3cc.zip
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
-rw-r--r--sys/netinet/tcp_stacks/rack.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/netinet/tcp_stacks/rack.c b/sys/netinet/tcp_stacks/rack.c
index 865e54c90e6a..e6b2ef60cef7 100644
--- a/sys/netinet/tcp_stacks/rack.c
+++ b/sys/netinet/tcp_stacks/rack.c
@@ -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