summaryrefslogtreecommitdiffstats
path: root/src/vnet
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2019-10-16 10:07:39 -0700
committerAndrew Yourtchenko <ayourtch@gmail.com>2019-10-31 12:13:32 +0000
commit7364ac14b64f86314b386c1428972c96ced67695 (patch)
treee6e9f8b0bbf127152f8f02b8a6087c5aa00cd92a /src/vnet
parentae36a85c86b22a7a0e7c01cdd6a12ba05fa12354 (diff)
tcp: avoid head retransmit if scoreboard has no holes
Type: fix Change-Id: I6164ad0d97cd91b60c85302eff691836d12a0a70 Signed-off-by: Florin Coras <fcoras@cisco.com> (cherry picked from commit 8a8b05c526883fe34b83239a3c4f56087d1df9e5)
Diffstat (limited to 'src/vnet')
-rwxr-xr-xsrc/vnet/tcp/tcp_input.c2
-rw-r--r--src/vnet/tcp/tcp_output.c3
2 files changed, 2 insertions, 3 deletions
diff --git a/src/vnet/tcp/tcp_input.c b/src/vnet/tcp/tcp_input.c
index 12377d68179..22222fba1e2 100755
--- a/src/vnet/tcp/tcp_input.c
+++ b/src/vnet/tcp/tcp_input.c
@@ -945,8 +945,6 @@ scoreboard_clear (sack_scoreboard_t * sb)
sb->sacked_bytes = 0;
sb->last_sacked_bytes = 0;
sb->last_bytes_delivered = 0;
- sb->high_sacked = 0;
- sb->high_rxt = 0;
sb->lost_bytes = 0;
sb->last_lost_bytes = 0;
sb->cur_rxt_hole = TCP_INVALID_SACK_HOLE_INDEX;
diff --git a/src/vnet/tcp/tcp_output.c b/src/vnet/tcp/tcp_output.c
index fb806446dcc..08099fffa4e 100644
--- a/src/vnet/tcp/tcp_output.c
+++ b/src/vnet/tcp/tcp_output.c
@@ -1932,7 +1932,8 @@ tcp_retransmit_sack (tcp_worker_ctx_t * wrk, tcp_connection_t * tc,
sb = &tc->sack_sb;
/* Check if snd_una is a lost retransmit */
- if (seq_gt (sb->high_sacked, tc->snd_congestion)
+ if (pool_elts (sb->holes)
+ && seq_gt (sb->high_sacked, tc->snd_congestion)
&& tc->rxt_head != tc->snd_una
&& tcp_retransmit_should_retry_head (tc, sb))
{