The branch main has been updated by rscheff:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=f858eb916fd263f696c290798d4a260b6e55af60

commit f858eb916fd263f696c290798d4a260b6e55af60
Author:     Richard Scheffenegger <[email protected]>
AuthorDate: 2023-03-28 02:01:48 +0000
Commit:     Richard Scheffenegger <[email protected]>
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,

Reply via email to