tcp: avoid head retransmit if scoreboard has no holes 09/23009/2
authorFlorin Coras <fcoras@cisco.com>
Wed, 16 Oct 2019 17:07:39 +0000 (10:07 -0700)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Thu, 31 Oct 2019 12:13:32 +0000 (12:13 +0000)
Type: fix

Change-Id: I6164ad0d97cd91b60c85302eff691836d12a0a70
Signed-off-by: Florin Coras <fcoras@cisco.com>
(cherry picked from commit 8a8b05c526883fe34b83239a3c4f56087d1df9e5)

src/vnet/tcp/tcp_input.c
src/vnet/tcp/tcp_output.c

index 12377d6..22222fb 100755 (executable)
@@ -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;
index fb80644..08099ff 100644 (file)
@@ -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))
     {