diff options
author | Changli Gao <xiaosuo@gmail.com> | 2010-08-17 19:01:38 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-08-19 17:10:38 -0700 |
commit | dbe5775bbc00116ed5699babfe17c54f32eb34c3 (patch) | |
tree | a835930d949396e1803384a549c7cafe59c3c053 /net/core | |
parent | 2d47b45951af087c1a4439c559309b0bf90a0718 (diff) |
net: rps: skip fragment when computing rxhash
Fragmented IP packets may have no transfer header, so when computing
rxhash, we should skip them.
Signed-off-by: Changli Gao <xiaosuo@gmail.com>
Acked-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dev.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index cf87fde3a29b..7e97e891636e 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2284,7 +2284,10 @@ __u32 __skb_get_rxhash(struct sk_buff *skb) goto done; ip = (struct iphdr *) skb->data + nhoff; - ip_proto = ip->protocol; + if (ip->frag_off & htons(IP_MF | IP_OFFSET)) + ip_proto = 0; + else + ip_proto = ip->protocol; addr1 = (__force u32) ip->saddr; addr2 = (__force u32) ip->daddr; ihl = ip->ihl; |