aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2010-12-17 15:27:22 -0500
committerDavid S. Miller <davem@davemloft.net>2010-12-17 15:27:22 -0500
commitb4aa9e05a61b845541fa6f5b1d246976922601f0 (patch)
treeca94478c3df281ab76a3399f5ba6341ade3f5791 /net/ipv6
parent1dc0f3c54ce1df957f99c17b145488fd03eb1a59 (diff)
parent4b8fe66300acb2fba8b16d62606e0d30204022fc (diff)
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/bnx2x/bnx2x.h drivers/net/wireless/iwlwifi/iwl-1000.c drivers/net/wireless/iwlwifi/iwl-6000.c drivers/net/wireless/iwlwifi/iwl-core.h drivers/vhost/vhost.c
Diffstat (limited to 'net/ipv6')
-rw-r--r--net/ipv6/addrconf.c8
-rw-r--r--net/ipv6/route.c7
-rw-r--r--net/ipv6/udp.c1
-rw-r--r--net/ipv6/udplite.c1
4 files changed, 13 insertions, 4 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)
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index e7efb269a6e9..d5c3b45d829e 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -1566,11 +1566,16 @@ static void rt6_do_pmtu_disc(struct in6_addr *daddr, struct in6_addr *saddr,
1566{ 1566{
1567 struct rt6_info *rt, *nrt; 1567 struct rt6_info *rt, *nrt;
1568 int allfrag = 0; 1568 int allfrag = 0;
1569 1569again:
1570 rt = rt6_lookup(net, daddr, saddr, ifindex, 0); 1570 rt = rt6_lookup(net, daddr, saddr, ifindex, 0);
1571 if (rt == NULL) 1571 if (rt == NULL)
1572 return; 1572 return;
1573 1573
1574 if (rt6_check_expired(rt)) {
1575 ip6_del_rt(rt);
1576 goto again;
1577 }
1578
1574 if (pmtu >= dst_mtu(&rt->dst)) 1579 if (pmtu >= dst_mtu(&rt->dst))
1575 goto out; 1580 goto out;
1576 1581
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index 26a8da3f2044..9a009c66c8a3 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -1477,6 +1477,7 @@ struct proto udpv6_prot = {
1477 .compat_setsockopt = compat_udpv6_setsockopt, 1477 .compat_setsockopt = compat_udpv6_setsockopt,
1478 .compat_getsockopt = compat_udpv6_getsockopt, 1478 .compat_getsockopt = compat_udpv6_getsockopt,
1479#endif 1479#endif
1480 .clear_sk = sk_prot_clear_portaddr_nulls,
1480}; 1481};
1481 1482
1482static struct inet_protosw udpv6_protosw = { 1483static struct inet_protosw udpv6_protosw = {
diff --git a/net/ipv6/udplite.c b/net/ipv6/udplite.c
index 5f48fadc27f7..986c4de5292e 100644
--- a/net/ipv6/udplite.c
+++ b/net/ipv6/udplite.c
@@ -55,6 +55,7 @@ struct proto udplitev6_prot = {
55 .compat_setsockopt = compat_udpv6_setsockopt, 55 .compat_setsockopt = compat_udpv6_setsockopt,
56 .compat_getsockopt = compat_udpv6_getsockopt, 56 .compat_getsockopt = compat_udpv6_getsockopt,
57#endif 57#endif
58 .clear_sk = sk_prot_clear_portaddr_nulls,
58}; 59};
59 60
60static struct inet_protosw udplite6_protosw = { 61static struct inet_protosw udplite6_protosw = {