diff options
Diffstat (limited to 'net/ipv4/tcp_input.c')
| -rw-r--r-- | net/ipv4/tcp_input.c | 20 | 
1 files changed, 9 insertions, 11 deletions
| diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 85308b90df8..d377f4854cb 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -2926,13 +2926,14 @@ static void tcp_enter_recovery(struct sock *sk, bool ece_ack)   * tcp_xmit_retransmit_queue().   */  static void tcp_fastretrans_alert(struct sock *sk, int pkts_acked, -				  int newly_acked_sacked, bool is_dupack, +				  int prior_sacked, bool is_dupack,  				  int flag)  {  	struct inet_connection_sock *icsk = inet_csk(sk);  	struct tcp_sock *tp = tcp_sk(sk);  	int do_lost = is_dupack || ((flag & FLAG_DATA_SACKED) &&  				    (tcp_fackets_out(tp) > tp->reordering)); +	int newly_acked_sacked = 0;  	int fast_rexmit = 0;  	if (WARN_ON(!tp->packets_out && tp->sacked_out)) @@ -2992,6 +2993,7 @@ static void tcp_fastretrans_alert(struct sock *sk, int pkts_acked,  				tcp_add_reno_sack(sk);  		} else  			do_lost = tcp_try_undo_partial(sk, pkts_acked); +		newly_acked_sacked = pkts_acked + tp->sacked_out - prior_sacked;  		break;  	case TCP_CA_Loss:  		if (flag & FLAG_DATA_ACKED) @@ -3013,6 +3015,7 @@ static void tcp_fastretrans_alert(struct sock *sk, int pkts_acked,  			if (is_dupack)  				tcp_add_reno_sack(sk);  		} +		newly_acked_sacked = pkts_acked + tp->sacked_out - prior_sacked;  		if (icsk->icsk_ca_state <= TCP_CA_Disorder)  			tcp_try_undo_dsack(sk); @@ -3590,7 +3593,6 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)  	int prior_packets;  	int prior_sacked = tp->sacked_out;  	int pkts_acked = 0; -	int newly_acked_sacked = 0;  	bool frto_cwnd = false;  	/* If the ack is older than previous acks @@ -3666,8 +3668,6 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)  	flag |= tcp_clean_rtx_queue(sk, prior_fackets, prior_snd_una);  	pkts_acked = prior_packets - tp->packets_out; -	newly_acked_sacked = (prior_packets - prior_sacked) - -			     (tp->packets_out - tp->sacked_out);  	if (tp->frto_counter)  		frto_cwnd = tcp_process_frto(sk, flag); @@ -3681,7 +3681,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)  		    tcp_may_raise_cwnd(sk, flag))  			tcp_cong_avoid(sk, ack, prior_in_flight);  		is_dupack = !(flag & (FLAG_SND_UNA_ADVANCED | FLAG_NOT_DUP)); -		tcp_fastretrans_alert(sk, pkts_acked, newly_acked_sacked, +		tcp_fastretrans_alert(sk, pkts_acked, prior_sacked,  				      is_dupack, flag);  	} else {  		if ((flag & FLAG_DATA_ACKED) && !frto_cwnd) @@ -3698,7 +3698,7 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)  no_queue:  	/* If data was DSACKed, see if we can undo a cwnd reduction. */  	if (flag & FLAG_DSACKING_ACK) -		tcp_fastretrans_alert(sk, pkts_acked, newly_acked_sacked, +		tcp_fastretrans_alert(sk, pkts_acked, prior_sacked,  				      is_dupack, flag);  	/* If this ack opens up a zero window, clear backoff.  It was  	 * being used to time the probes, and is probably far higher than @@ -3718,8 +3718,7 @@ old_ack:  	 */  	if (TCP_SKB_CB(skb)->sacked) {  		flag |= tcp_sacktag_write_queue(sk, skb, prior_snd_una); -		newly_acked_sacked = tp->sacked_out - prior_sacked; -		tcp_fastretrans_alert(sk, pkts_acked, newly_acked_sacked, +		tcp_fastretrans_alert(sk, pkts_acked, prior_sacked,  				      is_dupack, flag);  	} @@ -4662,7 +4661,7 @@ queue_and_out:  		if (eaten > 0)  			kfree_skb_partial(skb, fragstolen); -		else if (!sock_flag(sk, SOCK_DEAD)) +		if (!sock_flag(sk, SOCK_DEAD))  			sk->sk_data_ready(sk, 0);  		return;  	} @@ -5557,8 +5556,7 @@ no_ack:  #endif  			if (eaten)  				kfree_skb_partial(skb, fragstolen); -			else -				sk->sk_data_ready(sk, 0); +			sk->sk_data_ready(sk, 0);  			return 0;  		}  	} | 
