[WATCHDOG] iTCO_wdt (Intel TCO Timer) driver
[powerpc.git] / net / sctp / ipv6.c
index 8ef0807..249e503 100644 (file)
@@ -78,7 +78,6 @@
 
 #include <asm/uaccess.h>
 
-extern int sctp_inetaddr_event(struct notifier_block *, unsigned long, void *);
 static struct notifier_block sctp_inet6addr_notifier = {
        .notifier_call = sctp_inetaddr_event,
 };
@@ -290,7 +289,8 @@ static void sctp_v6_get_saddr(struct sctp_association *asoc,
        sctp_read_lock(addr_lock);
        list_for_each(pos, &bp->address_list) {
                laddr = list_entry(pos, struct sctp_sockaddr_entry, list);
-               if ((laddr->a.sa.sa_family == AF_INET6) &&
+               if ((laddr->use_as_src) &&
+                   (laddr->a.sa.sa_family == AF_INET6) &&
                    (scope <= sctp_scope(&laddr->a))) {
                        bmatchlen = sctp_v6_addr_match_len(daddr, &laddr->a);
                        if (!baddr || (matchlen < bmatchlen)) {
@@ -321,9 +321,9 @@ static void sctp_v6_copy_addrlist(struct list_head *addrlist,
        struct inet6_ifaddr *ifp;
        struct sctp_sockaddr_entry *addr;
 
-       read_lock(&addrconf_lock);
+       rcu_read_lock();
        if ((in6_dev = __in6_dev_get(dev)) == NULL) {
-               read_unlock(&addrconf_lock);
+               rcu_read_unlock();
                return;
        }
 
@@ -342,7 +342,7 @@ static void sctp_v6_copy_addrlist(struct list_head *addrlist,
        }
 
        read_unlock(&in6_dev->lock);
-       read_unlock(&addrconf_lock);
+       rcu_read_unlock();
 }
 
 /* Initialize a sockaddr_storage from in incoming skb. */