Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 122e4519 authored by stephen hemminger's avatar stephen hemminger Committed by David S. Miller
Browse files

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: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e5c1a0aa
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -2850,9 +2850,9 @@ static void addrconf_dad_timer(unsigned long data)
	struct inet6_dev *idev = ifp->idev;
	struct in6_addr mcaddr;

	read_lock_bh(&idev->lock);
	if (idev->dead) {
		read_unlock_bh(&idev->lock);
	read_lock(&idev->lock);
	if (idev->dead || !(idev->if_flags & IF_READY)) {
		read_unlock(&idev->lock);
		goto out;
	}

@@ -2864,7 +2864,7 @@ static void addrconf_dad_timer(unsigned long data)

		ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED);
		spin_unlock(&ifp->lock);
		read_unlock_bh(&idev->lock);
		read_unlock(&idev->lock);

		addrconf_dad_completed(ifp);

@@ -2874,7 +2874,7 @@ static void addrconf_dad_timer(unsigned long data)
	ifp->probes--;
	addrconf_mod_timer(ifp, AC_DAD, ifp->idev->nd_parms->retrans_time);
	spin_unlock(&ifp->lock);
	read_unlock_bh(&idev->lock);
	read_unlock(&idev->lock);

	/* send a neighbour solicitation for our addr */
	addrconf_addr_solict_mult(&ifp->addr, &mcaddr);