]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/ipv6/reassembly.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / net / ipv6 / reassembly.c
index 0f276645375969054b36aea6c8fcb7a80666921c..07beeb06f752da7cae16fb442d9d060624668275 100644 (file)
@@ -104,26 +104,22 @@ static int ip6_frag_reasm(struct frag_queue *fq, struct sk_buff *prev,
 unsigned int inet6_hash_frag(__be32 id, const struct in6_addr *saddr,
                             const struct in6_addr *daddr, u32 rnd)
 {
-       u32 a, b, c;
-
-       a = (__force u32)saddr->s6_addr32[0];
-       b = (__force u32)saddr->s6_addr32[1];
-       c = (__force u32)saddr->s6_addr32[2];
-
-       a += JHASH_GOLDEN_RATIO;
-       b += JHASH_GOLDEN_RATIO;
-       c += rnd;
-       __jhash_mix(a, b, c);
-
-       a += (__force u32)saddr->s6_addr32[3];
-       b += (__force u32)daddr->s6_addr32[0];
-       c += (__force u32)daddr->s6_addr32[1];
-       __jhash_mix(a, b, c);
-
-       a += (__force u32)daddr->s6_addr32[2];
-       b += (__force u32)daddr->s6_addr32[3];
-       c += (__force u32)id;
-       __jhash_mix(a, b, c);
+       u32 c;
+
+       c = jhash_3words((__force u32)saddr->s6_addr32[0],
+                        (__force u32)saddr->s6_addr32[1],
+                        (__force u32)saddr->s6_addr32[2],
+                        rnd);
+
+       c = jhash_3words((__force u32)saddr->s6_addr32[3],
+                        (__force u32)daddr->s6_addr32[0],
+                        (__force u32)daddr->s6_addr32[1],
+                        c);
+
+       c =  jhash_3words((__force u32)daddr->s6_addr32[2],
+                         (__force u32)daddr->s6_addr32[3],
+                         (__force u32)id,
+                         c);
 
        return c & (INETFRAGS_HASHSZ - 1);
 }