]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/ipv6/addrconf.c
[IPV6]: Use macro for rwlock_t initialization.
[linux-2.6-omap-h63xx.git] / net / ipv6 / addrconf.c
index 2a6439e3c91c432eb787fbf8ccf010fdfef00d7e..704fb73e6c5ff35f83147a96a84fe45be40d471b 100644 (file)
@@ -1195,7 +1195,7 @@ struct inet6_ifaddr * ipv6_get_ifaddr(struct in6_addr *addr, struct net_device *
 int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2)
 {
        const struct in6_addr *sk_rcv_saddr6 = &inet6_sk(sk)->rcv_saddr;
-       const struct in6_addr *sk2_rcv_saddr6 = tcp_v6_rcv_saddr(sk2);
+       const struct in6_addr *sk2_rcv_saddr6 = inet6_rcv_saddr(sk2);
        u32 sk_rcv_saddr = inet_sk(sk)->rcv_saddr;
        u32 sk2_rcv_saddr = inet_rcv_saddr(sk2);
        int sk_ipv6only = ipv6_only_sock(sk);
@@ -2467,11 +2467,9 @@ static void addrconf_dad_start(struct inet6_ifaddr *ifp, u32 flags)
                return;
        }
 
-       if (idev->if_flags & IF_READY) {
-               addrconf_dad_kick(ifp);
-               spin_unlock_bh(&ifp->lock);
-       } else {
+       if (!(idev->if_flags & IF_READY)) {
                spin_unlock_bh(&ifp->lock);
+               read_unlock_bh(&idev->lock);
                /*
                 * If the defice is not ready:
                 * - keep it tentative if it is a permanent address.
@@ -2479,7 +2477,10 @@ static void addrconf_dad_start(struct inet6_ifaddr *ifp, u32 flags)
                 */
                in6_ifa_hold(ifp);
                addrconf_dad_stop(ifp);
+               return;
        }
+       addrconf_dad_kick(ifp);
+       spin_unlock_bh(&ifp->lock);
 out:
        read_unlock_bh(&idev->lock);
 }