From: Florin Coras Date: Thu, 6 Jan 2022 03:54:45 +0000 (-0800) Subject: tcp: always exit recovery if not in fastrecovery X-Git-Tag: v22.06-rc0~59 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=8e76dfa7582ddc0396fa4c4fb0c61fed0a02c890;p=vpp.git tcp: always exit recovery if not in fastrecovery Stay in fast recovery only if it's already on. Type: improvement Signed-off-by: Florin Coras Change-Id: Idcdbbacfed3e5f3c991fa293c532be1c671f5217 --- diff --git a/src/vnet/tcp/tcp_input.c b/src/vnet/tcp/tcp_input.c index 058b1c0517e..11491a68257 100644 --- a/src/vnet/tcp/tcp_input.c +++ b/src/vnet/tcp/tcp_input.c @@ -757,10 +757,11 @@ tcp_cc_try_recover (tcp_connection_t *tc) tcp_connection_tx_pacer_reset (tc, tc->cwnd, 0 /* start bucket */ ); tc->rcv_dupacks = 0; + tcp_recovery_off (tc); /* Previous recovery left us congested. Continue sending as part * of the current recovery event with an updated snd_congestion */ - if (tc->sack_sb.sacked_bytes) + if (tc->sack_sb.sacked_bytes && tcp_in_fastrecovery (tc)) { tc->snd_congestion = tc->snd_nxt; return -1; @@ -777,12 +778,11 @@ tcp_cc_try_recover (tcp_connection_t *tc) if (hole && hole->start == tc->snd_una && hole->end == tc->snd_nxt) scoreboard_clear (&tc->sack_sb); - if (!tcp_in_recovery (tc) && !is_spurious) + if (tcp_in_fastrecovery (tc) && !is_spurious) tcp_cc_recovered (tc); tcp_fastrecovery_off (tc); tcp_fastrecovery_first_off (tc); - tcp_recovery_off (tc); TCP_EVT (TCP_EVT_CC_EVT, tc, 3); ASSERT (tc->rto_boff == 0);