|
@@ -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);
|