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 | } |
