mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 00:21:17 +00:00
net: revert 8728c544a9
("net: dev_pick_tx() fix")
commit8728c544a9
("net: dev_pick_tx() fix") and commitb6fe83e952
("bonding: refine IFF_XMIT_DST_RELEASE capability") are quite incompatible : Queue selection is disabled because skb dst was dropped before entering bonding device. This causes major performance regression, mainly because TCP packets for a given flow can be sent to multiple queues. This is particularly visible when using the new FQ packet scheduler with MQ + FQ setup on the slaves. We can safely revert the first commit now that416186fbf8
("net: Split core bits of netdev_pick_tx into __netdev_pick_tx") properly caps the queue_index. Reported-by: Xi Wang <xii@google.com> Diagnosed-by: Xi Wang <xii@google.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Tom Herbert <therbert@google.com> Cc: Alexander Duyck <alexander.h.duyck@intel.com> Cc: Denys Fedorysychenko <nuclearcat@nuclearcat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
25ad6117e7
commit
702821f4ea
1 changed files with 3 additions and 8 deletions
|
@ -346,14 +346,9 @@ u16 __netdev_pick_tx(struct net_device *dev, struct sk_buff *skb)
|
||||||
if (new_index < 0)
|
if (new_index < 0)
|
||||||
new_index = skb_tx_hash(dev, skb);
|
new_index = skb_tx_hash(dev, skb);
|
||||||
|
|
||||||
if (queue_index != new_index && sk) {
|
if (queue_index != new_index && sk &&
|
||||||
struct dst_entry *dst =
|
rcu_access_pointer(sk->sk_dst_cache))
|
||||||
rcu_dereference_check(sk->sk_dst_cache, 1);
|
sk_tx_queue_set(sk, queue_index);
|
||||||
|
|
||||||
if (dst && skb_dst(skb) == dst)
|
|
||||||
sk_tx_queue_set(sk, queue_index);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
queue_index = new_index;
|
queue_index = new_index;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue