diff options
author | David S. Miller <davem@davemloft.net> | 2014-09-23 12:09:27 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-09-23 12:09:27 -0400 |
commit | 1f6d80358dc9bbbeb56cb43384fa11fd645d9289 (patch) | |
tree | 152bfa5165292a8e4f06d536b6d222a68480e573 /net/ipv6 | |
parent | a2aeb02a8e6a9fef397c344245a54eeae67341f6 (diff) | |
parent | 98f75b8291a89ba6bf73e322ee467ce0bfeb91c1 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts:
arch/mips/net/bpf_jit.c
drivers/net/can/flexcan.c
Both the flexcan and MIPS bpf_jit conflicts were cases of simple
overlapping changes.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/addrconf.c | 8 | ||||
-rw-r--r-- | net/ipv6/anycast.c | 21 | ||||
-rw-r--r-- | net/ipv6/ip6_output.c | 4 |
3 files changed, 28 insertions, 5 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 39d33355d7e8..e189480f8fd6 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -3097,11 +3097,13 @@ restart: | |||
3097 | 3097 | ||
3098 | write_unlock_bh(&idev->lock); | 3098 | write_unlock_bh(&idev->lock); |
3099 | 3099 | ||
3100 | /* Step 5: Discard multicast list */ | 3100 | /* Step 5: Discard anycast and multicast list */ |
3101 | if (how) | 3101 | if (how) { |
3102 | ipv6_ac_destroy_dev(idev); | ||
3102 | ipv6_mc_destroy_dev(idev); | 3103 | ipv6_mc_destroy_dev(idev); |
3103 | else | 3104 | } else { |
3104 | ipv6_mc_down(idev); | 3105 | ipv6_mc_down(idev); |
3106 | } | ||
3105 | 3107 | ||
3106 | idev->tstamp = jiffies; | 3108 | idev->tstamp = jiffies; |
3107 | 3109 | ||
diff --git a/net/ipv6/anycast.c b/net/ipv6/anycast.c index 952c1fd06150..f5e319a8d4e2 100644 --- a/net/ipv6/anycast.c +++ b/net/ipv6/anycast.c | |||
@@ -345,6 +345,27 @@ static int ipv6_dev_ac_dec(struct net_device *dev, const struct in6_addr *addr) | |||
345 | return __ipv6_dev_ac_dec(idev, addr); | 345 | return __ipv6_dev_ac_dec(idev, addr); |
346 | } | 346 | } |
347 | 347 | ||
348 | void ipv6_ac_destroy_dev(struct inet6_dev *idev) | ||
349 | { | ||
350 | struct ifacaddr6 *aca; | ||
351 | |||
352 | write_lock_bh(&idev->lock); | ||
353 | while ((aca = idev->ac_list) != NULL) { | ||
354 | idev->ac_list = aca->aca_next; | ||
355 | write_unlock_bh(&idev->lock); | ||
356 | |||
357 | addrconf_leave_solict(idev, &aca->aca_addr); | ||
358 | |||
359 | dst_hold(&aca->aca_rt->dst); | ||
360 | ip6_del_rt(aca->aca_rt); | ||
361 | |||
362 | aca_put(aca); | ||
363 | |||
364 | write_lock_bh(&idev->lock); | ||
365 | } | ||
366 | write_unlock_bh(&idev->lock); | ||
367 | } | ||
368 | |||
348 | /* | 369 | /* |
349 | * check if the interface has this anycast address | 370 | * check if the interface has this anycast address |
350 | * called with rcu_read_lock() | 371 | * called with rcu_read_lock() |
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index 2e6a0dbf7fb3..8e950c250ada 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c | |||
@@ -1004,7 +1004,7 @@ struct dst_entry *ip6_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, | |||
1004 | if (final_dst) | 1004 | if (final_dst) |
1005 | fl6->daddr = *final_dst; | 1005 | fl6->daddr = *final_dst; |
1006 | 1006 | ||
1007 | return xfrm_lookup(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); | 1007 | return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); |
1008 | } | 1008 | } |
1009 | EXPORT_SYMBOL_GPL(ip6_dst_lookup_flow); | 1009 | EXPORT_SYMBOL_GPL(ip6_dst_lookup_flow); |
1010 | 1010 | ||
@@ -1036,7 +1036,7 @@ struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6, | |||
1036 | if (final_dst) | 1036 | if (final_dst) |
1037 | fl6->daddr = *final_dst; | 1037 | fl6->daddr = *final_dst; |
1038 | 1038 | ||
1039 | return xfrm_lookup(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); | 1039 | return xfrm_lookup_route(sock_net(sk), dst, flowi6_to_flowi(fl6), sk, 0); |
1040 | } | 1040 | } |
1041 | EXPORT_SYMBOL_GPL(ip6_sk_dst_lookup_flow); | 1041 | EXPORT_SYMBOL_GPL(ip6_sk_dst_lookup_flow); |
1042 | 1042 | ||