]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
tcp: Deal with DSACKs, and adjust rescue hole on success.
authorRichard Scheffenegger <rscheff@FreeBSD.org>
Tue, 20 Apr 2021 12:53:56 +0000 (14:53 +0200)
committerRichard Scheffenegger <rscheff@FreeBSD.org>
Fri, 23 Apr 2021 07:26:18 +0000 (09:26 +0200)
commitab9104cbe4d53ee337a7281151540e32bfcb8d25
treeace5bee539594e1d5735239a36b2aaa0d7d4d6ff
parentd76eb0da7283f83b09d5491d81e25485d87298ab
tcp: Deal with DSACKs, and adjust rescue hole on success.

When a rescue retransmission is successful, rather than
inserting new holes to the left of it, adjust the old
rescue entry to cover the missed sequence space.

Also, as snd_fack may be stale by that point, pull it forward
in order to never create a hole left of snd_una/th_ack.

Finally, with DSACKs, tcp_sack_doack() may be called
with new full ACKs but a DSACK block. Account for this
eventuality properly to keep sacked_bytes >= 0.

MFC after: 3 days
Reviewed By: kbowling, tuexen, #transport
Sponsored by: NetApp, Inc.
Differential Revision: https://reviews.freebsd.org/D29835

(cherry picked from commit a649f1f6fd7a098ab173a69fe87916c04a8c6f8d)
sys/netinet/tcp_sack.c