aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/addrconf.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/addrconf.c')
-rw-r--r--net/ipv6/addrconf.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 1023ad0d2b15..99d1888af363 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -2669,7 +2669,9 @@ static int addrconf_ifdown(struct net_device *dev, int how)
2669 2669
2670 ASSERT_RTNL(); 2670 ASSERT_RTNL();
2671 2671
2672 rt6_ifdown(net, dev); 2672 /* Flush routes if device is being removed or it is not loopback */
2673 if (how || !(dev->flags & IFF_LOOPBACK))
2674 rt6_ifdown(net, dev);
2673 neigh_ifdown(&nd_tbl, dev); 2675 neigh_ifdown(&nd_tbl, dev);
2674 2676
2675 idev = __in6_dev_get(dev); 2677 idev = __in6_dev_get(dev);
@@ -4057,11 +4059,11 @@ void inet6_ifinfo_notify(int event, struct inet6_dev *idev)
4057 kfree_skb(skb); 4059 kfree_skb(skb);
4058 goto errout; 4060 goto errout;
4059 } 4061 }
4060 rtnl_notify(skb, net, 0, RTNLGRP_IPV6_IFADDR, NULL, GFP_ATOMIC); 4062 rtnl_notify(skb, net, 0, RTNLGRP_IPV6_IFINFO, NULL, GFP_ATOMIC);
4061 return; 4063 return;
4062errout: 4064errout:
4063 if (err < 0) 4065 if (err < 0)
4064 rtnl_set_sk_err(net, RTNLGRP_IPV6_IFADDR, err); 4066 rtnl_set_sk_err(net, RTNLGRP_IPV6_IFINFO, err);
4065} 4067}
4066 4068
4067static inline size_t inet6_prefix_nlmsg_size(void) 4069static inline size_t inet6_prefix_nlmsg_size(void)