git: f858eb916fd2 - main - tcp: send SACK rescue retransmission also mid-stream
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 28 Mar 2023 02:48:11 UTC
The branch main has been updated by rscheff: URL: https://cgit.FreeBSD.org/src/commit/?id=f858eb916fd263f696c290798d4a260b6e55af60 commit f858eb916fd263f696c290798d4a260b6e55af60 Author: Richard Scheffenegger <rscheff@FreeBSD.org> AuthorDate: 2023-03-28 02:01:48 +0000 Commit: Richard Scheffenegger <rscheff@FreeBSD.org> CommitDate: 2023-03-28 02:47:01 +0000 tcp: send SACK rescue retransmission also mid-stream Previously, SACK rescue retransmissions would only happen on a loss recovery at the tail end of the send buffer. This extends the mechanism such that partial ACKs without SACK mid-stream also trigger a rescue retransmission to try avoid an otherwise unavoidable retransmission timeout. Reviewed By: tuexen, #transport Sponsored by: NetApp, Inc. Differential Revision: https://reviews.freebsd.org/D39274 --- sys/netinet/tcp_sack.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/netinet/tcp_sack.c b/sys/netinet/tcp_sack.c index 558773f91228..5900bc19e2e0 100644 --- a/sys/netinet/tcp_sack.c +++ b/sys/netinet/tcp_sack.c @@ -879,7 +879,6 @@ tcp_sack_partialack(struct tcpcb *tp, struct tcphdr *th) */ if ((V_tcp_do_newsack) && SEQ_LT(th->th_ack, tp->snd_recover) && - (tp->snd_recover == tp->snd_max) && TAILQ_EMPTY(&tp->snd_holes) && (tp->sackhint.delivered_data > 0)) { /* @@ -891,6 +890,7 @@ tcp_sack_partialack(struct tcpcb *tp, struct tcphdr *th) tcp_seq highdata = tp->snd_max; if (tp->t_flags & TF_SENTFIN) highdata--; + highdata = SEQ_MIN(highdata, tp->snd_recover); if (th->th_ack != highdata) { tp->snd_fack = th->th_ack; (void)tcp_sackhole_insert(tp, SEQ_MAX(th->th_ack,