From: Florin Coras Date: Fri, 13 Sep 2019 01:49:44 +0000 (-0700) Subject: tcp: cleanup scoreboard after recovery X-Git-Tag: v20.05-rc0~847 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F34%2F22034%2F2;p=vpp.git tcp: cleanup scoreboard after recovery Type: fix When recovering from congestion, remove last hole in scoreboard if it covers all bytes sent above snd_congestion. Change-Id: I752accd4590cd9bf553c35a1bb40a38c308c04f5 Signed-off-by: Florin Coras --- diff --git a/src/vnet/tcp/tcp_input.c b/src/vnet/tcp/tcp_input.c index 7ab7020ee9b..f4e1026e4c5 100755 --- a/src/vnet/tcp/tcp_input.c +++ b/src/vnet/tcp/tcp_input.c @@ -1298,7 +1298,14 @@ tcp_cc_is_spurious_retransmit (tcp_connection_t * tc) static int tcp_cc_recover (tcp_connection_t * tc) { + sack_scoreboard_hole_t *hole; + ASSERT (tcp_in_cong_recovery (tc)); + + hole = scoreboard_first_hole (&tc->sack_sb); + if (hole && hole->start == tc->snd_una && hole->end == tc->snd_nxt) + scoreboard_clear (&tc->sack_sb); + if (tcp_cc_is_spurious_retransmit (tc)) { tcp_cc_congestion_undo (tc);