diff options
Diffstat (limited to 'net/ipv6/addrconf.c')
-rw-r--r-- | net/ipv6/addrconf.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index d328d5986143..b7d8822c1be4 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -2165,6 +2165,9 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event, | |||
2165 | dev->name); | 2165 | dev->name); |
2166 | break; | 2166 | break; |
2167 | } | 2167 | } |
2168 | |||
2169 | if (idev) | ||
2170 | idev->if_flags |= IF_READY; | ||
2168 | } else { | 2171 | } else { |
2169 | if (!netif_carrier_ok(dev)) { | 2172 | if (!netif_carrier_ok(dev)) { |
2170 | /* device is still not ready. */ | 2173 | /* device is still not ready. */ |
@@ -3321,9 +3324,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) | |||
3321 | 3324 | ||
3322 | switch (event) { | 3325 | switch (event) { |
3323 | case RTM_NEWADDR: | 3326 | case RTM_NEWADDR: |
3324 | dst_hold(&ifp->rt->u.dst); | 3327 | ip6_ins_rt(ifp->rt, NULL, NULL, NULL); |
3325 | if (ip6_ins_rt(ifp->rt, NULL, NULL, NULL)) | ||
3326 | dst_release(&ifp->rt->u.dst); | ||
3327 | if (ifp->idev->cnf.forwarding) | 3328 | if (ifp->idev->cnf.forwarding) |
3328 | addrconf_join_anycast(ifp); | 3329 | addrconf_join_anycast(ifp); |
3329 | break; | 3330 | break; |
@@ -3334,8 +3335,6 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp) | |||
3334 | dst_hold(&ifp->rt->u.dst); | 3335 | dst_hold(&ifp->rt->u.dst); |
3335 | if (ip6_del_rt(ifp->rt, NULL, NULL, NULL)) | 3336 | if (ip6_del_rt(ifp->rt, NULL, NULL, NULL)) |
3336 | dst_free(&ifp->rt->u.dst); | 3337 | dst_free(&ifp->rt->u.dst); |
3337 | else | ||
3338 | dst_release(&ifp->rt->u.dst); | ||
3339 | break; | 3338 | break; |
3340 | } | 3339 | } |
3341 | } | 3340 | } |