svn commit: r232097 - head/sys/net80211
Adrian Chadd
adrian at FreeBSD.org
Fri Feb 24 05:40:36 UTC 2012
Author: adrian
Date: Fri Feb 24 05:40:36 2012
New Revision: 232097
URL: http://svn.freebsd.org/changeset/base/232097
Log:
Hold IF_LOCK when manipulating the interface flags.
It doesn't _really_ help all that much, I'll commit something to
sys/net/if.c at some point explaining why, but the lock should be held
when checking/manipulating/branching because of said lock.
Modified:
head/sys/net80211/ieee80211_output.c
Modified: head/sys/net80211/ieee80211_output.c
==============================================================================
--- head/sys/net80211/ieee80211_output.c Fri Feb 24 05:39:00 2012 (r232096)
+++ head/sys/net80211/ieee80211_output.c Fri Feb 24 05:40:36 2012 (r232097)
@@ -157,8 +157,10 @@ ieee80211_start(struct ifnet *ifp)
"%s: ignore queue, in %s state\n",
__func__, ieee80211_state_name[vap->iv_state]);
vap->iv_stats.is_tx_badstate++;
- ifp->if_drv_flags |= IFF_DRV_OACTIVE;
IEEE80211_UNLOCK(ic);
+ IFQ_LOCK(&ifp->if_snd);
+ ifp->if_drv_flags |= IFF_DRV_OACTIVE;
+ IFQ_UNLOCK(&ifp->if_snd);
return;
}
IEEE80211_UNLOCK(ic);
@@ -389,7 +391,9 @@ ieee80211_output(struct ifnet *ifp, stru
struct ieee80211_frame *wh;
int error;
+ IFQ_LOCK(&ifp->if_snd);
if (ifp->if_drv_flags & IFF_DRV_OACTIVE) {
+ IFQ_UNLOCK(&ifp->if_snd);
/*
* Short-circuit requests if the vap is marked OACTIVE
* as this can happen because a packet came down through
@@ -400,6 +404,7 @@ ieee80211_output(struct ifnet *ifp, stru
*/
senderr(ENETDOWN);
}
+ IFQ_UNLOCK(&ifp->if_snd);
vap = ifp->if_softc;
/*
* Hand to the 802.3 code if not tagged as
More information about the svn-src-all
mailing list