|
@@ -1929,7 +1929,6 @@ void tcp_enter_loss(struct sock *sk)
|
|
|
struct sk_buff *skb;
|
|
|
bool new_recovery = icsk->icsk_ca_state < TCP_CA_Recovery;
|
|
|
bool is_reneg; /* is receiver reneging on SACKs? */
|
|
|
- bool mark_lost;
|
|
|
|
|
|
/* Reduce ssthresh if it has not yet been made inside this window. */
|
|
|
if (icsk->icsk_ca_state <= TCP_CA_Disorder ||
|
|
@@ -1945,9 +1944,6 @@ void tcp_enter_loss(struct sock *sk)
|
|
|
tp->snd_cwnd_cnt = 0;
|
|
|
tp->snd_cwnd_stamp = tcp_jiffies32;
|
|
|
|
|
|
- tp->retrans_out = 0;
|
|
|
- tp->lost_out = 0;
|
|
|
-
|
|
|
if (tcp_is_reno(tp))
|
|
|
tcp_reset_reno_sack(tp);
|
|
|
|
|
@@ -1959,21 +1955,13 @@ void tcp_enter_loss(struct sock *sk)
|
|
|
/* Mark SACK reneging until we recover from this loss event. */
|
|
|
tp->is_sack_reneg = 1;
|
|
|
}
|
|
|
- tcp_clear_all_retrans_hints(tp);
|
|
|
-
|
|
|
skb_rbtree_walk_from(skb) {
|
|
|
- mark_lost = (!(TCP_SKB_CB(skb)->sacked & TCPCB_SACKED_ACKED) ||
|
|
|
- is_reneg);
|
|
|
- if (mark_lost)
|
|
|
- tcp_sum_lost(tp, skb);
|
|
|
- TCP_SKB_CB(skb)->sacked &= (~TCPCB_TAGBITS)|TCPCB_SACKED_ACKED;
|
|
|
- if (mark_lost) {
|
|
|
+ if (is_reneg)
|
|
|
TCP_SKB_CB(skb)->sacked &= ~TCPCB_SACKED_ACKED;
|
|
|
- TCP_SKB_CB(skb)->sacked |= TCPCB_LOST;
|
|
|
- tp->lost_out += tcp_skb_pcount(skb);
|
|
|
- }
|
|
|
+ tcp_mark_skb_lost(sk, skb);
|
|
|
}
|
|
|
tcp_verify_left_out(tp);
|
|
|
+ tcp_clear_all_retrans_hints(tp);
|
|
|
|
|
|
/* Timeout in disordered state after receiving substantial DUPACKs
|
|
|
* suggests that the degree of reordering is over-estimated.
|