projects/linux·commit 18f22fbb

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6

18f22fbb · Linus Torvalds <[email protected]> · 2008-09-22 07:45:06 -07:00

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6:
  netdev: simple_tx_hash shouldn't hash inside fragments
Commit
18f22fbb8ba5570a5ea3d531bc4ec65cf211f11b
Parents
72d31053 · ad55dcaf

Merge commit. Changes below are compared with the first parent: 72d31053.

Changes

1 files changed · +4 −2

FileStatusAddDelContent
net/core/dev.cmodified+4−2View file

net/core/dev.c

View file
diff --git a/net/core/dev.c b/net/core/dev.c
index e719ed2..e8eb2b4 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -122,6 +122,7 @@
#include <linux/if_arp.h>
#include <linux/if_vlan.h>
#include <linux/ip.h>
+#include <net/ip.h>
#include <linux/ipv6.h>
#include <linux/in.h>
#include <linux/jhash.h>
@@ -1667,7 +1668,7 @@ static u16 simple_tx_hash(struct net_device *dev, struct sk_buff *skb)
{
u32 addr1, addr2, ports;
u32 hash, ihl;
- u8 ip_proto;
+ u8 ip_proto = 0;
if (unlikely(!simple_tx_hashrnd_initialized)) {
get_random_bytes(&simple_tx_hashrnd, 4);
@@ -1676,7 +1677,8 @@ static u16 simple_tx_hash(struct net_device *dev, struct sk_buff *skb)
switch (skb->protocol) {
case __constant_htons(ETH_P_IP):
- ip_proto = ip_hdr(skb)->protocol;
+ if (!(ip_hdr(skb)->frag_off & htons(IP_MF | IP_OFFSET)))
+ ip_proto = ip_hdr(skb)->protocol;
addr1 = ip_hdr(skb)->saddr;
addr2 = ip_hdr(skb)->daddr;
ihl = ip_hdr(skb)->ihl;