tcp: always evaluate losses in RACK upon undo
authorYuchung Cheng <ycheng@google.com>
Thu, 7 Dec 2017 19:33:31 +0000 (11:33 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 8 Dec 2017 19:14:11 +0000 (14:14 -0500)
When sender detects spurious retransmission, all packets
marked lost are remarked to be in-flight. However some may
be considered lost based on its timestamps in RACK. This patch
forces RACK to re-evaluate, which may be skipped previously if
the ACK does not advance RACK timestamp.

Signed-off-by: Yuchung Cheng <ycheng@google.com>
Reviewed-by: Neal Cardwell <ncardwell@google.com>
Reviewed-by: Priyaranjan Jha <priyarjha@google.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_input.c

index 075c559570e6ec1fefbd108874049ec1dd5470ee..9550cc42de2d9ba4cca6d961a2a3bca501755a69 100644 (file)
@@ -2329,6 +2329,7 @@ static void tcp_undo_cwnd_reduction(struct sock *sk, bool unmark_loss)
        }
        tp->snd_cwnd_stamp = tcp_jiffies32;
        tp->undo_marker = 0;
+       tp->rack.advanced = 1; /* Force RACK to re-exam losses */
 }
 
 static inline bool tcp_may_undo(const struct tcp_sock *tp)