diff --git a/[refs] b/[refs] index 5e759e7f5e57..ed7c8f84c160 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: accc5b4f902b0ba83b2c6c48f2d9e7c204cef4a8 +refs/heads/master: 513de11bba246b7a67df4c314d9fc936b6a75d0e diff --git a/trunk/net/core/dev.c b/trunk/net/core/dev.c index 81442957c5c2..3c8073fe970a 100644 --- a/trunk/net/core/dev.c +++ b/trunk/net/core/dev.c @@ -1735,8 +1735,12 @@ u16 skb_tx_hash(const struct net_device *dev, const struct sk_buff *skb) { u32 hash; - if (skb_rx_queue_recorded(skb)) - return skb_get_rx_queue(skb) % dev->real_num_tx_queues; + if (skb_rx_queue_recorded(skb)) { + hash = skb_get_rx_queue(skb); + while (unlikely (hash >= dev->real_num_tx_queues)) + hash -= dev->real_num_tx_queues; + return hash; + } if (skb->sk && skb->sk->sk_hash) hash = skb->sk->sk_hash;