mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 22:51:35 +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
@ -346,14 +346,9 @@ u16 __netdev_pick_tx(struct net_device *dev, struct sk_buff *skb)
|
||||
if (new_index < 0)
|
||||
new_index = skb_tx_hash(dev, skb);
|
||||
|
||||
if (queue_index != new_index && sk) {
|
||||
struct dst_entry *dst =
|
||||
rcu_dereference_check(sk->sk_dst_cache, 1);
|
||||
|
||||
if (dst && skb_dst(skb) == dst)
|
||||
sk_tx_queue_set(sk, queue_index);
|
||||
|
||||
}
|
||||
if (queue_index != new_index && sk &&
|
||||
rcu_access_pointer(sk->sk_dst_cache))
|
||||
sk_tx_queue_set(sk, queue_index);
|
||||
|
||||
queue_index = new_index;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user