diff options
author | David S. Miller <davem@davemloft.net> | 2010-07-20 21:25:24 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-07-20 21:25:24 -0400 |
commit | 11fe883936980fe242869d671092a466cf1db3e3 (patch) | |
tree | 14ff24e81eb4326e94eb5aa6432a1dd55cef5ece /net/core | |
parent | 70d4bf6d467a330ccc947df9b2608e329d9e7708 (diff) | |
parent | 573201f36fd9c7c6d5218cdcd9948cee700b277d (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.c | 20 | ||||
-rw-r--r-- | net/core/neighbour.c | 5 |
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 | */ |
1911 | static inline void skb_orphan_try(struct sk_buff *skb) | 1911 | static 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) | |||
2053 | static struct netdev_queue *dev_pick_tx(struct net_device *dev, | 2060 | static 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) { |