net: spread __net_init, __net_exit
[safe/jmp/linux-2.6] / net / ipv6 / udp.c
index 2915e1d..34efb35 100644 (file)
@@ -89,7 +89,7 @@ static unsigned int udp6_portaddr_hash(struct net *net,
 
        if (ipv6_addr_any(addr6))
                hash = jhash_1word(0, mix);
-       else if (ipv6_addr_type(addr6) == IPV6_ADDR_MAPPED)
+       else if (ipv6_addr_v4mapped(addr6))
                hash = jhash_1word(addr6->s6_addr32[3], mix);
        else
                hash = jhash2(addr6->s6_addr32, 4, mix);
@@ -100,12 +100,14 @@ static unsigned int udp6_portaddr_hash(struct net *net,
 
 int udp_v6_get_port(struct sock *sk, unsigned short snum)
 {
+       unsigned int hash2_nulladdr =
+               udp6_portaddr_hash(sock_net(sk), &in6addr_any, snum);
+       unsigned int hash2_partial = 
+               udp6_portaddr_hash(sock_net(sk), &inet6_sk(sk)->rcv_saddr, 0);
+
        /* precompute partial secondary hash */
-       udp_sk(sk)->udp_portaddr_hash =
-               udp6_portaddr_hash(sock_net(sk),
-                                  &inet6_sk(sk)->rcv_saddr,
-                                  0);
-       return udp_lib_get_port(sk, snum, ipv6_rcv_saddr_equal);
+       udp_sk(sk)->udp_portaddr_hash = hash2_partial;
+       return udp_lib_get_port(sk, snum, ipv6_rcv_saddr_equal, hash2_nulladdr);
 }
 
 static inline int compute_score(struct sock *sk, struct net *net,
@@ -181,8 +183,6 @@ static inline int compute_score2(struct sock *sk, struct net *net,
        return score;
 }
 
-#define udp_portaddr_for_each_entry_rcu(__sk, node, list) \
-       hlist_nulls_for_each_entry_rcu(__sk, node, list, __sk_common.skc_portaddr_node)
 
 /* called with read_rcu_lock() */
 static struct sock *udp6_lib_lookup2(struct net *net,
@@ -1396,7 +1396,7 @@ static struct udp_seq_afinfo udp6_seq_afinfo = {
        },
 };
 
-int udp6_proc_init(struct net *net)
+int __net_init udp6_proc_init(struct net *net)
 {
        return udp_proc_register(net, &udp6_seq_afinfo);
 }