aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorstephen hemminger <shemminger@vyatta.com>2010-03-02 08:32:44 -0500
committerDavid S. Miller <davem@davemloft.net>2010-03-04 03:39:32 -0500
commit122e4519cd5c224d4b8e681d368132b643e28f60 (patch)
tree1fe589902069d711663b027ba0a631971254b22e /net
parente5c1a0aa00ce94ab0cd669bb290c3ae4657242a3 (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.c10
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);