projects
/
powerpc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge master.kernel.org:/pub/scm/linux/kernel/git/tmlind/linux-omap-upstream
[powerpc.git]
/
net
/
ipv6
/
addrconf.c
diff --git
a/net/ipv6/addrconf.c
b/net/ipv6/addrconf.c
index
2a6439e
..
d328d59
100644
(file)
--- a/
net/ipv6/addrconf.c
+++ b/
net/ipv6/addrconf.c
@@
-58,6
+58,7
@@
#ifdef CONFIG_SYSCTL
#include <linux/sysctl.h>
#endif
#ifdef CONFIG_SYSCTL
#include <linux/sysctl.h>
#endif
+#include <linux/capability.h>
#include <linux/delay.h>
#include <linux/notifier.h>
#include <linux/string.h>
#include <linux/delay.h>
#include <linux/notifier.h>
#include <linux/string.h>
@@
-1195,7
+1196,7
@@
struct inet6_ifaddr * ipv6_get_ifaddr(struct in6_addr *addr, struct net_device *
int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2)
{
const struct in6_addr *sk_rcv_saddr6 = &inet6_sk(sk)->rcv_saddr;
int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2)
{
const struct in6_addr *sk_rcv_saddr6 = &inet6_sk(sk)->rcv_saddr;
- const struct in6_addr *sk2_rcv_saddr6 =
tcp_v
6_rcv_saddr(sk2);
+ const struct in6_addr *sk2_rcv_saddr6 =
inet
6_rcv_saddr(sk2);
u32 sk_rcv_saddr = inet_sk(sk)->rcv_saddr;
u32 sk2_rcv_saddr = inet_rcv_saddr(sk2);
int sk_ipv6only = ipv6_only_sock(sk);
u32 sk_rcv_saddr = inet_sk(sk)->rcv_saddr;
u32 sk2_rcv_saddr = inet_rcv_saddr(sk2);
int sk_ipv6only = ipv6_only_sock(sk);
@@
-1228,7
+1229,7
@@
int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2)
/* Gets referenced address, destroys ifaddr */
/* Gets referenced address, destroys ifaddr */
-void addrconf_dad_stop(struct inet6_ifaddr *ifp)
+
static
void addrconf_dad_stop(struct inet6_ifaddr *ifp)
{
if (ifp->flags&IFA_F_PERMANENT) {
spin_lock_bh(&ifp->lock);
{
if (ifp->flags&IFA_F_PERMANENT) {
spin_lock_bh(&ifp->lock);
@@
-2467,11
+2468,9
@@
static void addrconf_dad_start(struct inet6_ifaddr *ifp, u32 flags)
return;
}
return;
}
- if (idev->if_flags & IF_READY) {
- addrconf_dad_kick(ifp);
- spin_unlock_bh(&ifp->lock);
- } else {
+ if (!(idev->if_flags & IF_READY)) {
spin_unlock_bh(&ifp->lock);
spin_unlock_bh(&ifp->lock);
+ read_unlock_bh(&idev->lock);
/*
* If the defice is not ready:
* - keep it tentative if it is a permanent address.
/*
* If the defice is not ready:
* - keep it tentative if it is a permanent address.
@@
-2479,7
+2478,10
@@
static void addrconf_dad_start(struct inet6_ifaddr *ifp, u32 flags)
*/
in6_ifa_hold(ifp);
addrconf_dad_stop(ifp);
*/
in6_ifa_hold(ifp);
addrconf_dad_stop(ifp);
+ return;
}
}
+ addrconf_dad_kick(ifp);
+ spin_unlock_bh(&ifp->lock);
out:
read_unlock_bh(&idev->lock);
}
out:
read_unlock_bh(&idev->lock);
}
@@
-2642,7
+2644,7
@@
static int if6_seq_show(struct seq_file *seq, void *v)
{
struct inet6_ifaddr *ifp = (struct inet6_ifaddr *)v;
seq_printf(seq,
{
struct inet6_ifaddr *ifp = (struct inet6_ifaddr *)v;
seq_printf(seq,
-
"%04x%04x%04x%04x%04x%04x%04x%04x
%02x %02x %02x %02x %8s\n",
+
NIP6_SEQFMT "
%02x %02x %02x %02x %8s\n",
NIP6(ifp->addr),
ifp->idev->dev->ifindex,
ifp->prefix_len,
NIP6(ifp->addr),
ifp->idev->dev->ifindex,
ifp->prefix_len,