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,