diff options
author | stephen hemminger <shemminger@vyatta.com> | 2010-03-02 08:32:44 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-03-04 03:39:32 -0500 |
commit | 122e4519cd5c224d4b8e681d368132b643e28f60 (patch) | |
tree | 1fe589902069d711663b027ba0a631971254b22e /net | |
parent | e5c1a0aa00ce94ab0cd669bb290c3ae4657242a3 (diff) |
IPv6: addrconf dad timer unnecessary bh_disable
Timer code runs in bottom half, so there is no need for
using _bh form of locking. Also check if device is not ready
to avoid race with address that is no longer active.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-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); |