diff options
Diffstat (limited to 'net/ipv6/addrconf.c')
-rw-r--r-- | net/ipv6/addrconf.c | 8 |
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; |
4062 | errout: | 4064 | errout: |
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 | ||
4067 | static inline size_t inet6_prefix_nlmsg_size(void) | 4069 | static inline size_t inet6_prefix_nlmsg_size(void) |