diff options
author | Richard Scheffenegger <rscheff@FreeBSD.org> | 2024-01-08 08:28:01 +0000 |
---|---|---|
committer | Richard Scheffenegger <rscheff@FreeBSD.org> | 2024-01-11 00:40:14 +0000 |
commit | 8923d34c6cbf68d506abd9fcf8a790a77eb952ad (patch) | |
tree | bb7f2d4f697ff75ab91b258ed6c363523c575cb6 | |
parent | d730ffcd6ad3da47d9a1af00a534a78861280f54 (diff) | |
download | src-8923d34c6cbf68d506abd9fcf8a790a77eb952ad.tar.gz src-8923d34c6cbf68d506abd9fcf8a790a77eb952ad.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.c | 1 | ||||
-rw-r--r-- | sys/netinet/tcp_output.c | 2 |
2 files changed, 3 insertions, 0 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 9a5b9b05f210..262e95d08071 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -529,6 +529,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 3e1a2320f331..834bce35f5ba 100644 --- a/sys/netinet/tcp_output.c +++ b/sys/netinet/tcp_output.c @@ -1691,6 +1691,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) { |