diff options
author | Richard Scheffenegger <rscheff@FreeBSD.org> | 2021-04-28 12:56:14 +0000 |
---|---|---|
committer | Richard Scheffenegger <rscheff@FreeBSD.org> | 2021-04-28 13:01:10 +0000 |
commit | 48be5b976e34022862da3be69350d60e969d39e5 (patch) | |
tree | 9a918f0b5fa531841ad94ec2b4cb459560ba47cd | |
parent | 18f21f0355481283ceef0ec10e99554f44c205c2 (diff) | |
download | src-48be5b976e34022862da3be69350d60e969d39e5.tar.gz src-48be5b976e34022862da3be69350d60e969d39e5.zip |
tcp: stop spurious rescue retransmissions and potential asserts
Reported by: pho@
MFC after: 3 days
Reviewed By: tuexen, #transport
Sponsored by: NetApp, Inc.
Differential Revision: https://reviews.freebsd.org/D29970
-rw-r--r-- | sys/netinet/tcp_input.c | 1 | ||||
-rw-r--r-- | sys/netinet/tcp_sack.c | 4 |
2 files changed, 4 insertions, 1 deletions
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 9d45c5ab42dc..bdbf28556149 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -506,6 +506,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_out = 0; } diff --git a/sys/netinet/tcp_sack.c b/sys/netinet/tcp_sack.c index bfe40854c76b..0eaeb39af71a 100644 --- a/sys/netinet/tcp_sack.c +++ b/sys/netinet/tcp_sack.c @@ -872,9 +872,11 @@ tcp_sack_partialack(struct tcpcb *tp, struct tcphdr *th) tcp_seq highdata = tp->snd_max; if (tp->t_flags & TF_SENTFIN) highdata--; - if (th->th_ack != highdata) + if (th->th_ack != highdata) { + tp->snd_fack = th->th_ack; (void)tcp_sackhole_insert(tp, SEQ_MAX(th->th_ack, highdata - maxseg), highdata, NULL); + } } (void) tp->t_fb->tfb_tcp_output(tp); } |