diff options
Diffstat (limited to 'net/ipv4/tcp_output.c')
| -rw-r--r-- | net/ipv4/tcp_output.c | 7 | 
1 files changed, 5 insertions, 2 deletions
| diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 672854664ff..7820f3a7dd7 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -1875,8 +1875,12 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle,  		 *  - better RTT estimation and ACK scheduling  		 *  - faster recovery  		 *  - high rates +		 * Alas, some drivers / subsystems require a fair amount +		 * of queued bytes to ensure line rate. +		 * One example is wifi aggregation (802.11 AMPDU)  		 */ -		limit = max(skb->truesize, sk->sk_pacing_rate >> 10); +		limit = max_t(unsigned int, sysctl_tcp_limit_output_bytes, +			      sk->sk_pacing_rate >> 10);  		if (atomic_read(&sk->sk_wmem_alloc) > limit) {  			set_bit(TSQ_THROTTLED, &tp->tsq_flags); @@ -3093,7 +3097,6 @@ void tcp_send_window_probe(struct sock *sk)  {  	if (sk->sk_state == TCP_ESTABLISHED) {  		tcp_sk(sk)->snd_wl1 = tcp_sk(sk)->rcv_nxt - 1; -		tcp_sk(sk)->snd_nxt = tcp_sk(sk)->write_seq;  		tcp_xmit_probe_skb(sk, 0);  	}  } | 
