From 664127342cd8e0f3e7dceb22a74dc04dcaf7f8b1 Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Sun, 11 Apr 2010 21:18:17 +0000 Subject: [PATCH] --- yaml --- r: 190018 b: refs/heads/master c: 8728c544a9cbdcb0034aa5c45706c5f953f030ee h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/core/dev.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 1b1a6aea7c05..ef17fbcbe908 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4eaa0e3c869acd5dbc7c2e3818a9ae9cbf221d27 +refs/heads/master: 8728c544a9cbdcb0034aa5c45706c5f953f030ee diff --git a/trunk/net/core/dev.c b/trunk/net/core/dev.c index 1c8a0ce473a8..92584bfef09b 100644 --- a/trunk/net/core/dev.c +++ b/trunk/net/core/dev.c @@ -1989,8 +1989,12 @@ static struct netdev_queue *dev_pick_tx(struct net_device *dev, if (dev->real_num_tx_queues > 1) queue_index = skb_tx_hash(dev, skb); - if (sk && sk->sk_dst_cache) - sk_tx_queue_set(sk, queue_index); + if (sk) { + struct dst_entry *dst = rcu_dereference(sk->sk_dst_cache); + + if (dst && skb_dst(skb) == dst) + sk_tx_queue_set(sk, queue_index); + } } }