|
@@ -1267,7 +1267,9 @@ out:
|
|
|
in6_ifa_put(ifp);
|
|
|
}
|
|
|
|
|
|
-static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, struct inet6_ifaddr *ift)
|
|
|
+static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp,
|
|
|
+ struct inet6_ifaddr *ift,
|
|
|
+ bool block)
|
|
|
{
|
|
|
struct inet6_dev *idev = ifp->idev;
|
|
|
struct in6_addr addr, *tmpaddr;
|
|
@@ -1371,7 +1373,7 @@ retry:
|
|
|
|
|
|
ift = ipv6_add_addr(idev, &addr, NULL, tmp_plen,
|
|
|
ipv6_addr_scope(&addr), addr_flags,
|
|
|
- tmp_valid_lft, tmp_prefered_lft, true, NULL);
|
|
|
+ tmp_valid_lft, tmp_prefered_lft, block, NULL);
|
|
|
if (IS_ERR(ift)) {
|
|
|
in6_ifa_put(ifp);
|
|
|
in6_dev_put(idev);
|
|
@@ -1956,7 +1958,7 @@ static void addrconf_dad_stop(struct inet6_ifaddr *ifp, int dad_failed)
|
|
|
if (ifpub) {
|
|
|
in6_ifa_hold(ifpub);
|
|
|
spin_unlock_bh(&ifp->lock);
|
|
|
- ipv6_create_tempaddr(ifpub, ifp);
|
|
|
+ ipv6_create_tempaddr(ifpub, ifp, true);
|
|
|
in6_ifa_put(ifpub);
|
|
|
} else {
|
|
|
spin_unlock_bh(&ifp->lock);
|
|
@@ -2456,7 +2458,7 @@ static void manage_tempaddrs(struct inet6_dev *idev,
|
|
|
* no temporary address currently exists.
|
|
|
*/
|
|
|
read_unlock_bh(&idev->lock);
|
|
|
- ipv6_create_tempaddr(ifp, NULL);
|
|
|
+ ipv6_create_tempaddr(ifp, NULL, false);
|
|
|
} else {
|
|
|
read_unlock_bh(&idev->lock);
|
|
|
}
|
|
@@ -4351,7 +4353,7 @@ restart:
|
|
|
spin_lock(&ifpub->lock);
|
|
|
ifpub->regen_count = 0;
|
|
|
spin_unlock(&ifpub->lock);
|
|
|
- ipv6_create_tempaddr(ifpub, ifp);
|
|
|
+ ipv6_create_tempaddr(ifpub, ifp, true);
|
|
|
in6_ifa_put(ifpub);
|
|
|
in6_ifa_put(ifp);
|
|
|
goto restart;
|