| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- From: Eric Dumazet <[email protected]>
- 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 <[email protected]>
- Cc: Alexander Duyck <[email protected]>
- Acked-by: Alexander Duyck <[email protected]>
- ---
- 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;
- }
|