Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/usb/asix_common.c net/ipv4/inet_connection_sock.c net/switchdev/switchdev.c In the inet_connection_sock.c case the request socket hashing scheme is completely different in net-next. The other two conflicts were overlapping changes. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -143,6 +143,9 @@ static void rt6_uncached_list_flush_dev(struct net *net, struct net_device *dev)
|
||||
struct net_device *loopback_dev = net->loopback_dev;
|
||||
int cpu;
|
||||
|
||||
if (dev == loopback_dev)
|
||||
return;
|
||||
|
||||
for_each_possible_cpu(cpu) {
|
||||
struct uncached_list *ul = per_cpu_ptr(&rt6_uncached_list, cpu);
|
||||
struct rt6_info *rt;
|
||||
@@ -152,14 +155,12 @@ static void rt6_uncached_list_flush_dev(struct net *net, struct net_device *dev)
|
||||
struct inet6_dev *rt_idev = rt->rt6i_idev;
|
||||
struct net_device *rt_dev = rt->dst.dev;
|
||||
|
||||
if (rt_idev && (rt_idev->dev == dev || !dev) &&
|
||||
rt_idev->dev != loopback_dev) {
|
||||
if (rt_idev->dev == dev) {
|
||||
rt->rt6i_idev = in6_dev_get(loopback_dev);
|
||||
in6_dev_put(rt_idev);
|
||||
}
|
||||
|
||||
if (rt_dev && (rt_dev == dev || !dev) &&
|
||||
rt_dev != loopback_dev) {
|
||||
if (rt_dev == dev) {
|
||||
rt->dst.dev = loopback_dev;
|
||||
dev_hold(rt->dst.dev);
|
||||
dev_put(rt_dev);
|
||||
@@ -248,12 +249,6 @@ static void ip6_rt_blackhole_redirect(struct dst_entry *dst, struct sock *sk,
|
||||
{
|
||||
}
|
||||
|
||||
static u32 *ip6_rt_blackhole_cow_metrics(struct dst_entry *dst,
|
||||
unsigned long old)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static struct dst_ops ip6_dst_blackhole_ops = {
|
||||
.family = AF_INET6,
|
||||
.destroy = ip6_dst_destroy,
|
||||
@@ -262,7 +257,7 @@ static struct dst_ops ip6_dst_blackhole_ops = {
|
||||
.default_advmss = ip6_default_advmss,
|
||||
.update_pmtu = ip6_rt_blackhole_update_pmtu,
|
||||
.redirect = ip6_rt_blackhole_redirect,
|
||||
.cow_metrics = ip6_rt_blackhole_cow_metrics,
|
||||
.cow_metrics = dst_cow_metrics_generic,
|
||||
.neigh_lookup = ip6_neigh_lookup,
|
||||
};
|
||||
|
||||
@@ -319,6 +314,15 @@ static const struct rt6_info ip6_blk_hole_entry_template = {
|
||||
|
||||
#endif
|
||||
|
||||
static void rt6_info_init(struct rt6_info *rt)
|
||||
{
|
||||
struct dst_entry *dst = &rt->dst;
|
||||
|
||||
memset(dst + 1, 0, sizeof(*rt) - sizeof(*dst));
|
||||
INIT_LIST_HEAD(&rt->rt6i_siblings);
|
||||
INIT_LIST_HEAD(&rt->rt6i_uncached);
|
||||
}
|
||||
|
||||
/* allocate dst with ip6_dst_ops */
|
||||
static struct rt6_info *__ip6_dst_alloc(struct net *net,
|
||||
struct net_device *dev,
|
||||
@@ -327,13 +331,9 @@ static struct rt6_info *__ip6_dst_alloc(struct net *net,
|
||||
struct rt6_info *rt = dst_alloc(&net->ipv6.ip6_dst_ops, dev,
|
||||
0, DST_OBSOLETE_FORCE_CHK, flags);
|
||||
|
||||
if (rt) {
|
||||
struct dst_entry *dst = &rt->dst;
|
||||
if (rt)
|
||||
rt6_info_init(rt);
|
||||
|
||||
memset(dst + 1, 0, sizeof(*rt) - sizeof(*dst));
|
||||
INIT_LIST_HEAD(&rt->rt6i_siblings);
|
||||
INIT_LIST_HEAD(&rt->rt6i_uncached);
|
||||
}
|
||||
return rt;
|
||||
}
|
||||
|
||||
@@ -1198,24 +1198,20 @@ struct dst_entry *ip6_blackhole_route(struct net *net, struct dst_entry *dst_ori
|
||||
|
||||
rt = dst_alloc(&ip6_dst_blackhole_ops, ort->dst.dev, 1, DST_OBSOLETE_NONE, 0);
|
||||
if (rt) {
|
||||
rt6_info_init(rt);
|
||||
|
||||
new = &rt->dst;
|
||||
|
||||
memset(new + 1, 0, sizeof(*rt) - sizeof(*new));
|
||||
|
||||
new->__use = 1;
|
||||
new->input = dst_discard;
|
||||
new->output = dst_discard_out;
|
||||
|
||||
if (dst_metrics_read_only(&ort->dst))
|
||||
new->_metrics = ort->dst._metrics;
|
||||
else
|
||||
dst_copy_metrics(new, &ort->dst);
|
||||
dst_copy_metrics(new, &ort->dst);
|
||||
rt->rt6i_idev = ort->rt6i_idev;
|
||||
if (rt->rt6i_idev)
|
||||
in6_dev_hold(rt->rt6i_idev);
|
||||
|
||||
rt->rt6i_gateway = ort->rt6i_gateway;
|
||||
rt->rt6i_flags = ort->rt6i_flags;
|
||||
rt->rt6i_flags = ort->rt6i_flags & ~RTF_PCPU;
|
||||
rt->rt6i_metric = 0;
|
||||
|
||||
memcpy(&rt->rt6i_dst, &ort->rt6i_dst, sizeof(struct rt6key));
|
||||
@@ -2609,7 +2605,8 @@ void rt6_ifdown(struct net *net, struct net_device *dev)
|
||||
|
||||
fib6_clean_all(net, fib6_ifdown, &adn);
|
||||
icmp6_clean_all(fib6_ifdown, &adn);
|
||||
rt6_uncached_list_flush_dev(net, dev);
|
||||
if (dev)
|
||||
rt6_uncached_list_flush_dev(net, dev);
|
||||
}
|
||||
|
||||
struct rt6_mtu_change_arg {
|
||||
|
Reference in New Issue
Block a user