diff options
Diffstat (limited to 'net/ipv6')
-rw-r--r-- | net/ipv6/addrconf.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 88fd8c5877ee..e6cba9c45c6c 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -2850,9 +2850,9 @@ static void addrconf_dad_timer(unsigned long data) | |||
2850 | struct inet6_dev *idev = ifp->idev; | 2850 | struct inet6_dev *idev = ifp->idev; |
2851 | struct in6_addr mcaddr; | 2851 | struct in6_addr mcaddr; |
2852 | 2852 | ||
2853 | read_lock_bh(&idev->lock); | 2853 | read_lock(&idev->lock); |
2854 | if (idev->dead) { | 2854 | if (idev->dead || !(idev->if_flags & IF_READY)) { |
2855 | read_unlock_bh(&idev->lock); | 2855 | read_unlock(&idev->lock); |
2856 | goto out; | 2856 | goto out; |
2857 | } | 2857 | } |
2858 | 2858 | ||
@@ -2864,7 +2864,7 @@ static void addrconf_dad_timer(unsigned long data) | |||
2864 | 2864 | ||
2865 | ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED); | 2865 | ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED); |
2866 | spin_unlock(&ifp->lock); | 2866 | spin_unlock(&ifp->lock); |
2867 | read_unlock_bh(&idev->lock); | 2867 | read_unlock(&idev->lock); |
2868 | 2868 | ||
2869 | addrconf_dad_completed(ifp); | 2869 | addrconf_dad_completed(ifp); |
2870 | 2870 | ||
@@ -2874,7 +2874,7 @@ static void addrconf_dad_timer(unsigned long data) | |||
2874 | ifp->probes--; | 2874 | ifp->probes--; |
2875 | addrconf_mod_timer(ifp, AC_DAD, ifp->idev->nd_parms->retrans_time); | 2875 | addrconf_mod_timer(ifp, AC_DAD, ifp->idev->nd_parms->retrans_time); |
2876 | spin_unlock(&ifp->lock); | 2876 | spin_unlock(&ifp->lock); |
2877 | read_unlock_bh(&idev->lock); | 2877 | read_unlock(&idev->lock); |
2878 | 2878 | ||
2879 | /* send a neighbour solicitation for our addr */ | 2879 | /* send a neighbour solicitation for our addr */ |
2880 | addrconf_addr_solict_mult(&ifp->addr, &mcaddr); | 2880 | addrconf_addr_solict_mult(&ifp->addr, &mcaddr); |