aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2010-07-20 21:25:24 -0400
committerDavid S. Miller <davem@davemloft.net>2010-07-20 21:25:24 -0400
commit11fe883936980fe242869d671092a466cf1db3e3 (patch)
tree14ff24e81eb4326e94eb5aa6432a1dd55cef5ece /net/core
parent70d4bf6d467a330ccc947df9b2608e329d9e7708 (diff)
parent573201f36fd9c7c6d5218cdcd9948cee700b277d (diff)
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/vhost/net.c net/bridge/br_device.c Fix merge conflict in drivers/vhost/net.c with guidance from Stephen Rothwell. Revert the effects of net-2.6 commit 573201f36fd9c7c6d5218cdcd9948cee700b277d since net-next-2.6 has fixes that make bridge netpoll work properly thus we don't need it disabled. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/dev.c20
-rw-r--r--net/core/neighbour.c5
2 files changed, 17 insertions, 8 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 9de75cdade56..6e1b4370781c 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -1910,8 +1910,16 @@ static int dev_gso_segment(struct sk_buff *skb)
1910 */ 1910 */
1911static inline void skb_orphan_try(struct sk_buff *skb) 1911static inline void skb_orphan_try(struct sk_buff *skb)
1912{ 1912{
1913 if (!skb_tx(skb)->flags) 1913 struct sock *sk = skb->sk;
1914
1915 if (sk && !skb_tx(skb)->flags) {
1916 /* skb_tx_hash() wont be able to get sk.
1917 * We copy sk_hash into skb->rxhash
1918 */
1919 if (!skb->rxhash)
1920 skb->rxhash = sk->sk_hash;
1914 skb_orphan(skb); 1921 skb_orphan(skb);
1922 }
1915} 1923}
1916 1924
1917/* 1925/*
@@ -2029,8 +2037,7 @@ u16 skb_tx_hash(const struct net_device *dev, const struct sk_buff *skb)
2029 if (skb->sk && skb->sk->sk_hash) 2037 if (skb->sk && skb->sk->sk_hash)
2030 hash = skb->sk->sk_hash; 2038 hash = skb->sk->sk_hash;
2031 else 2039 else
2032 hash = (__force u16) skb->protocol; 2040 hash = (__force u16) skb->protocol ^ skb->rxhash;
2033
2034 hash = jhash_1word(hash, hashrnd); 2041 hash = jhash_1word(hash, hashrnd);
2035 2042
2036 return (u16) (((u64) hash * dev->real_num_tx_queues) >> 32); 2043 return (u16) (((u64) hash * dev->real_num_tx_queues) >> 32);
@@ -2053,12 +2060,11 @@ static inline u16 dev_cap_txqueue(struct net_device *dev, u16 queue_index)
2053static struct netdev_queue *dev_pick_tx(struct net_device *dev, 2060static struct netdev_queue *dev_pick_tx(struct net_device *dev,
2054 struct sk_buff *skb) 2061 struct sk_buff *skb)
2055{ 2062{
2056 u16 queue_index; 2063 int queue_index;
2057 struct sock *sk = skb->sk; 2064 struct sock *sk = skb->sk;
2058 2065
2059 if (sk_tx_queue_recorded(sk)) { 2066 queue_index = sk_tx_queue_get(sk);
2060 queue_index = sk_tx_queue_get(sk); 2067 if (queue_index < 0) {
2061 } else {
2062 const struct net_device_ops *ops = dev->netdev_ops; 2068 const struct net_device_ops *ops = dev->netdev_ops;
2063 2069
2064 if (ops->ndo_select_queue) { 2070 if (ops->ndo_select_queue) {
diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 6ba1c0eece03..a4e0a7482c2b 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -949,7 +949,10 @@ static void neigh_update_hhs(struct neighbour *neigh)
949{ 949{
950 struct hh_cache *hh; 950 struct hh_cache *hh;
951 void (*update)(struct hh_cache*, const struct net_device*, const unsigned char *) 951 void (*update)(struct hh_cache*, const struct net_device*, const unsigned char *)
952 = neigh->dev->header_ops->cache_update; 952 = NULL;
953
954 if (neigh->dev->header_ops)
955 update = neigh->dev->header_ops->cache_update;
953 956
954 if (update) { 957 if (update) {
955 for (hh = neigh->hh; hh; hh = hh->hh_next) { 958 for (hh = neigh->hh; hh; hh = hh->hh_next) {