X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=net%2Fipv4%2Ftcp_output.c;h=ec335fabd5cc12daba8addf5de86adc90abbd561;hb=61eb900352ff731d990d5415ce9f04e4af6a6136;hp=536d40929ba6f809d5c79968c48053202dd3748f;hpb=e3d98847ded1d183111ff7c4d1ef56b161c7f13e;p=~andy%2Flinux 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);