aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_input.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r--net/ipv4/tcp_input.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 65b9f274a774..4c10d9cad20f 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -1671,7 +1671,7 @@ static void tcp_enter_frto_loss(struct sock *sk, int allowed_segments, int flag)
1671 tp->high_seq = tp->frto_highmark; 1671 tp->high_seq = tp->frto_highmark;
1672 TCP_ECN_queue_cwr(tp); 1672 TCP_ECN_queue_cwr(tp);
1673 1673
1674 tcp_clear_all_retrans_hints(tp); 1674 tcp_clear_retrans_hints_partial(tp);
1675} 1675}
1676 1676
1677void tcp_clear_retrans(struct tcp_sock *tp) 1677void tcp_clear_retrans(struct tcp_sock *tp)
@@ -1711,10 +1711,14 @@ void tcp_enter_loss(struct sock *sk, int how)
1711 tp->bytes_acked = 0; 1711 tp->bytes_acked = 0;
1712 tcp_clear_retrans(tp); 1712 tcp_clear_retrans(tp);
1713 1713
1714 /* Push undo marker, if it was plain RTO and nothing 1714 if (!how) {
1715 * was retransmitted. */ 1715 /* Push undo marker, if it was plain RTO and nothing
1716 if (!how) 1716 * was retransmitted. */
1717 tp->undo_marker = tp->snd_una; 1717 tp->undo_marker = tp->snd_una;
1718 tcp_clear_retrans_hints_partial(tp);
1719 } else {
1720 tcp_clear_all_retrans_hints(tp);
1721 }
1718 1722
1719 tcp_for_write_queue(skb, sk) { 1723 tcp_for_write_queue(skb, sk) {
1720 if (skb == tcp_send_head(sk)) 1724 if (skb == tcp_send_head(sk))
@@ -1741,8 +1745,6 @@ void tcp_enter_loss(struct sock *sk, int how)
1741 TCP_ECN_queue_cwr(tp); 1745 TCP_ECN_queue_cwr(tp);
1742 /* Abort FRTO algorithm if one is in progress */ 1746 /* Abort FRTO algorithm if one is in progress */
1743 tp->frto_counter = 0; 1747 tp->frto_counter = 0;
1744
1745 tcp_clear_all_retrans_hints(tp);
1746} 1748}
1747 1749
1748static int tcp_check_sack_reneging(struct sock *sk) 1750static int tcp_check_sack_reneging(struct sock *sk)