net: rps: skip fragment when computing rxhash
authorChangli Gao <xiaosuo@gmail.com>
Tue, 17 Aug 2010 19:01:38 +0000 (19:01 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Aug 2010 00:10:38 +0000 (17:10 -0700)
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>
net/core/dev.c

index cf87fde3a29bc62ae6cb6a5d6b7424b646f183fd..7e97e891636e868409d9a375c12825ca17d42b7e 100644 (file)
@@ -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;