diff options
Diffstat (limited to 'net/ipv4/tcp_output.c')
| -rw-r--r-- | net/ipv4/tcp_output.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 536d40929ba..ec335fabd5c 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -874,11 +874,13 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,  							   &md5);  	tcp_header_size = tcp_options_size + sizeof(struct tcphdr); -	if (tcp_packets_in_flight(tp) == 0) { +	if (tcp_packets_in_flight(tp) == 0)  		tcp_ca_event(sk, CA_EVENT_TX_START); -		skb->ooo_okay = 1; -	} else -		skb->ooo_okay = 0; + +	/* if no packet is in qdisc/device queue, then allow XPS to select +	 * another queue. +	 */ +	skb->ooo_okay = sk_wmem_alloc_get(sk) == 0;  	skb_push(skb, tcp_header_size);  	skb_reset_transport_header(skb);  |