kernel: backport a fix for multiqueue selection to prevent tcp reordering with fair queueing
Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 38016
This commit is contained in:
parent
5d8cdd84e8
commit
9158a08983
1 changed files with 41 additions and 0 deletions
|
@ -0,0 +1,41 @@
|
||||||
|
From: Eric Dumazet <edumazet@google.com>
|
||||||
|
|
||||||
|
commit 416186fbf8c5b4e4465 ("net: Split core bits of netdev_pick_tx
|
||||||
|
into __netdev_pick_tx") added a bug that disables caching of queue
|
||||||
|
index in the socket.
|
||||||
|
|
||||||
|
This is the source of packet reorders for TCP flows, and
|
||||||
|
again this is happening more often when using FQ pacing.
|
||||||
|
|
||||||
|
Old code was doing
|
||||||
|
|
||||||
|
if (queue_index != old_index)
|
||||||
|
sk_tx_queue_set(sk, queue_index);
|
||||||
|
|
||||||
|
Alexander renamed the variables but forgot to change sk_tx_queue_set()
|
||||||
|
2nd parameter.
|
||||||
|
|
||||||
|
if (queue_index != new_index)
|
||||||
|
sk_tx_queue_set(sk, queue_index);
|
||||||
|
|
||||||
|
This means we store -1 over and over in sk->sk_tx_queue_mapping
|
||||||
|
|
||||||
|
Signed-off-by: Eric Dumazet <edumazet@google.com>
|
||||||
|
Cc: Alexander Duyck <alexander.h.duyck@intel.com>
|
||||||
|
Acked-by: Alexander Duyck <alexander.h.duyck@intel.com>
|
||||||
|
|
||||||
|
---
|
||||||
|
net/core/flow_dissector.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/net/core/flow_dissector.c
|
||||||
|
+++ b/net/core/flow_dissector.c
|
||||||
|
@@ -347,7 +347,7 @@ u16 __netdev_pick_tx(struct net_device *
|
||||||
|
|
||||||
|
if (queue_index != new_index && sk &&
|
||||||
|
rcu_access_pointer(sk->sk_dst_cache))
|
||||||
|
- sk_tx_queue_set(sk, queue_index);
|
||||||
|
+ sk_tx_queue_set(sk, new_index);
|
||||||
|
|
||||||
|
queue_index = new_index;
|
||||||
|
}
|
Loading…
Reference in a new issue