aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Scheffenegger <rscheff@FreeBSD.org>2024-01-08 08:28:01 +0000
committerRichard Scheffenegger <rscheff@FreeBSD.org>2024-01-11 00:33:53 +0000
commit407054ed48916e8d19d0b8d0cb9f5df16a27c69c (patch)
tree991a3d435bb82604747fbfd959da8225cd421f0f
parent38fe4bc08264652cd33964ba6042bd4c0faf6b76 (diff)
downloadsrc-407054ed48916e8d19d0b8d0cb9f5df16a27c69c.tar.gz
src-407054ed48916e8d19d0b8d0cb9f5df16a27c69c.zip
tcp: clean PRR state after ECN congestion recovery.
PRR state was not properly reset on subsequent ECN CE events. Clean up after local transmission failures too. Reviewed by: tuexen, cc, #transport MFC after: 3 days Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D43170 (cherry picked from commit 429f14f83ae1f6357a9455d4f075522420b01b03)
-rw-r--r--sys/netinet/tcp_input.c1
-rw-r--r--sys/netinet/tcp_output.c2
2 files changed, 3 insertions, 0 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index 2d7a6fa11b4e..9eefef3ea81e 100644
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -487,6 +487,7 @@ cc_post_recovery(struct tcpcb *tp, struct tcphdr *th)
/* XXXLAS: EXIT_RECOVERY ? */
tp->t_bytes_acked = 0;
tp->sackhint.delivered_data = 0;
+ tp->sackhint.prr_delivered = 0;
tp->sackhint.prr_out = 0;
}
diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
index 8efea91e116f..549218badcec 100644
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -1665,6 +1665,8 @@ timer:
if (flags & TH_FIN)
tp->snd_nxt--;
}
+ if (IN_RECOVERY(tp->t_flags))
+ tp->sackhint.prr_out -= len;
}
SOCKBUF_UNLOCK_ASSERT(&so->so_snd); /* Check gotos. */
switch (error) {