aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/ipv6/addrconf.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index a9913d23f7c7..9d78c1229497 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -2704,17 +2704,18 @@ static int addrconf_ifdown(struct net_device *dev, int how)
2704 /* Flag it for later restoration when link comes up */ 2704 /* Flag it for later restoration when link comes up */
2705 ifa->flags |= IFA_F_TENTATIVE; 2705 ifa->flags |= IFA_F_TENTATIVE;
2706 in6_ifa_hold(ifa); 2706 in6_ifa_hold(ifa);
2707 write_unlock_bh(&idev->lock);
2707 } else { 2708 } else {
2708 list_del(&ifa->if_list); 2709 list_del(&ifa->if_list);
2709 ifa->dead = 1; 2710 ifa->dead = 1;
2710 } 2711 write_unlock_bh(&idev->lock);
2711 write_unlock_bh(&idev->lock);
2712 2712
2713 /* clear hash table */ 2713 /* clear hash table */
2714 spin_lock_bh(&addrconf_hash_lock); 2714 spin_lock_bh(&addrconf_hash_lock);
2715 hlist_del_init_rcu(&ifa->addr_lst); 2715 hlist_del_init_rcu(&ifa->addr_lst);
2716 __in6_ifa_put(ifa); 2716 __in6_ifa_put(ifa);
2717 spin_unlock_bh(&addrconf_hash_lock); 2717 spin_unlock_bh(&addrconf_hash_lock);
2718 }
2718 2719
2719 __ipv6_ifa_notify(RTM_DELADDR, ifa); 2720 __ipv6_ifa_notify(RTM_DELADDR, ifa);
2720 atomic_notifier_call_chain(&inet6addr_chain, NETDEV_DOWN, ifa); 2721 atomic_notifier_call_chain(&inet6addr_chain, NETDEV_DOWN, ifa);