From owner-p4-projects@FreeBSD.ORG Tue Aug 2 15:59:52 2005 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4471816A424; Tue, 2 Aug 2005 15:59:52 +0000 (GMT) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id F0DE316A43E for ; Tue, 2 Aug 2005 15:59:51 +0000 (GMT) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id AA05943D45 for ; Tue, 2 Aug 2005 15:59:51 +0000 (GMT) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j72Fxpr3097546 for ; Tue, 2 Aug 2005 15:59:51 GMT (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j72FxpQV097543 for perforce@freebsd.org; Tue, 2 Aug 2005 15:59:51 GMT (envelope-from sam@freebsd.org) Date: Tue, 2 Aug 2005 15:59:51 GMT Message-Id: <200508021559.j72FxpQV097543@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Cc: Subject: PERFORCE change 81337 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Aug 2005 15:59:53 -0000 http://perforce.freebsd.org/chv.cgi?CH=81337 Change 81337 by sam@sam_ebb on 2005/08/02 15:59:36 clean ff buffers returned to sc_txbuf so they don't get reclaimed again when the module is unloaded Affected files ... .. //depot/projects/wifi/sys/dev/ath/if_ath.c#96 edit Differences ... ==== //depot/projects/wifi/sys/dev/ath/if_ath.c#96 (text+ko) ==== @@ -1139,13 +1139,15 @@ bad: if (ni != NULL) ieee80211_free_node(ni); - if (bf->bf_m != NULL) + bf->bf_node = NULL; + if (bf->bf_m != NULL) { m_freem(bf->bf_m); - if (bf != NULL) { - ATH_TXBUF_LOCK(sc); - STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); - ATH_TXBUF_UNLOCK(sc); - } + bf->bf_m = NULL; + } + + ATH_TXBUF_LOCK(sc); + STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); + ATH_TXBUF_UNLOCK(sc); } } @@ -1272,11 +1274,13 @@ m->m_nextpkt = NULL; bfstaged->bf_m->m_nextpkt = m; m = bfstaged->bf_m; + bfstaged->bf_m = NULL; m->m_flags |= M_FF; /* * Release the node reference held while * the packet sat on an_ff_buf[] */ + bfstaged->bf_node = NULL; ieee80211_free_node(ni); /* @@ -1349,14 +1353,15 @@ */ if (ni != NULL) ieee80211_free_node(ni); - if (bfstaged->bf_m != NULL) + bfstaged->bf_node = NULL; + if (bfstaged->bf_m != NULL) { m_freem(bfstaged->bf_m); - if (bfstaged != NULL) { - ATH_TXBUF_LOCK(sc); - STAILQ_INSERT_TAIL(&sc->sc_txbuf, - bfstaged, bf_list); - ATH_TXBUF_UNLOCK(sc); + bfstaged->bf_m = NULL; } + + ATH_TXBUF_LOCK(sc); + STAILQ_INSERT_TAIL(&sc->sc_txbuf, bfstaged, bf_list); + ATH_TXBUF_UNLOCK(sc); } else { #if 0 ifp->if_opackets++; @@ -1392,6 +1397,7 @@ ATH_TXBUF_LOCK_ASSERT(sc); STAILQ_FOREACH_SAFE(bf, frags, bf_list, next) { + /* NB: bf assumed clean */ STAILQ_REMOVE_HEAD(frags, bf_list); STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); ieee80211_node_decref(ni); @@ -1605,6 +1611,8 @@ bad: ifp->if_oerrors++; reclaim: + bf->bf_m = NULL; + bf->bf_node = NULL; ATH_TXBUF_LOCK(sc); STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); ath_txfrag_cleanup(sc, &frags, ni); @@ -4380,6 +4388,7 @@ } m_freem(bf->bf_m); bf->bf_m = NULL; + ATH_TXBUF_LOCK(sc); STAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); ATH_TXBUF_UNLOCK(sc);