ipvs: fix hashing in ip_vs_svc_hashkey
authorJulian Anastasov <ja@ssi.bg>
Sat, 9 Mar 2013 21:25:07 +0000 (23:25 +0200)
committerSimon Horman <horms@verge.net.au>
Tue, 19 Mar 2013 12:18:38 +0000 (21:18 +0900)
net is a pointer in host order, mix it properly
with other keys in network order. Fixes sparse warning.

Signed-off-by: Julian Anastasov <ja@ssi.bg>
Signed-off-by: Simon Horman <horms@verge.net.au>
net/netfilter/ipvs/ip_vs_ctl.c

index c68198bf9128abfb695571faed1e0390b036a4bb..a528178f750642fc1b7e508b2d4b3b90de9cc7ac 100644 (file)
@@ -271,16 +271,18 @@ ip_vs_svc_hashkey(struct net *net, int af, unsigned int proto,
 {
        register unsigned int porth = ntohs(port);
        __be32 addr_fold = addr->ip;
+       __u32 ahash;
 
 #ifdef CONFIG_IP_VS_IPV6
        if (af == AF_INET6)
                addr_fold = addr->ip6[0]^addr->ip6[1]^
                            addr->ip6[2]^addr->ip6[3];
 #endif
-       addr_fold ^= ((size_t)net>>8);
+       ahash = ntohl(addr_fold);
+       ahash ^= ((size_t) net >> 8);
 
-       return (proto^ntohl(addr_fold)^(porth>>IP_VS_SVC_TAB_BITS)^porth)
-               & IP_VS_SVC_TAB_MASK;
+       return (proto ^ ahash ^ (porth >> IP_VS_SVC_TAB_BITS) ^ porth) &
+              IP_VS_SVC_TAB_MASK;
 }
 
 /*