On Wed, 12 Aug 2009, Sam Leffler wrote:

 Drain link state event changes posted during vap destroy.  This is a
 band-aid for the general problem that if_link_state_change can be
 called between if_detach and if_free leaving a task queued that has
 been free'd.

FYI to others -- we believe the proper fix should be in the ifnet framework, but this change was the lowest-risk way to resolve the problem for 8.0. Following the release we'll investigate having the ifnet framework provide this protection automatically for drivers.

Robert N M Watson
Computer Laboratory
University of Cambridge


 Spotted by:    thompsa
 Reviewed by:   rwatson
 Approved by:   re (rwatson)

Modified:
 head/sys/net80211/ieee80211.c

Modified: head/sys/net80211/ieee80211.c
==============================================================================
--- head/sys/net80211/ieee80211.c       Wed Aug 12 21:06:43 2009        
(r196158)
+++ head/sys/net80211/ieee80211.c       Wed Aug 12 21:19:19 2009        
(r196159)
@@ -573,11 +573,13 @@ ieee80211_vap_detach(struct ieee80211vap

        /*
         * Flush any deferred vap tasks.
-        * NB: must be before ether_ifdetach() and removal from ic_vaps list
         */
        ieee80211_draintask(ic, &vap->iv_nstate_task);
        ieee80211_draintask(ic, &vap->iv_swbmiss_task);

+       /* XXX band-aid until ifnet handles this for us */
+       taskqueue_drain(taskqueue_swi, &ifp->if_linktask);
+
        IEEE80211_LOCK(ic);
        KASSERT(vap->iv_state == IEEE80211_S_INIT , ("vap still running"));
        TAILQ_REMOVE(&ic->ic_vaps, vap, iv_next);

_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to