diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
| -rw-r--r-- | net/ipv4/tcp_input.c | 8 | 
1 files changed, 4 insertions, 4 deletions
| diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index b5c23756965a..40639c288dc2 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -1106,7 +1106,7 @@ static bool tcp_check_dsack(struct sock *sk, const struct sk_buff *ack_skb,  	}  	/* D-SACK for already forgotten data... Do dumb counting. */ -	if (dup_sack && tp->undo_marker && tp->undo_retrans && +	if (dup_sack && tp->undo_marker && tp->undo_retrans > 0 &&  	    !after(end_seq_0, prior_snd_una) &&  	    after(end_seq_0, tp->undo_marker))  		tp->undo_retrans--; @@ -1187,7 +1187,7 @@ static u8 tcp_sacktag_one(struct sock *sk,  	/* Account D-SACK for retransmitted packet. */  	if (dup_sack && (sacked & TCPCB_RETRANS)) { -		if (tp->undo_marker && tp->undo_retrans && +		if (tp->undo_marker && tp->undo_retrans > 0 &&  		    after(end_seq, tp->undo_marker))  			tp->undo_retrans--;  		if (sacked & TCPCB_SACKED_ACKED) @@ -1893,7 +1893,7 @@ static void tcp_clear_retrans_partial(struct tcp_sock *tp)  	tp->lost_out = 0;  	tp->undo_marker = 0; -	tp->undo_retrans = 0; +	tp->undo_retrans = -1;  }  void tcp_clear_retrans(struct tcp_sock *tp) @@ -2665,7 +2665,7 @@ static void tcp_enter_recovery(struct sock *sk, bool ece_ack)  	tp->prior_ssthresh = 0;  	tp->undo_marker = tp->snd_una; -	tp->undo_retrans = tp->retrans_out; +	tp->undo_retrans = tp->retrans_out ? : -1;  	if (inet_csk(sk)->icsk_ca_state < TCP_CA_CWR) {  		if (!ece_ack) |