summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/usb/if_otus.c6
-rw-r--r--sys/dev/usb/if_run.c6
2 files changed, 8 insertions, 4 deletions
diff --git a/sys/dev/usb/if_otus.c b/sys/dev/usb/if_otus.c
index 7c56ed5086e..12bb568f0b7 100644
--- a/sys/dev/usb/if_otus.c
+++ b/sys/dev/usb/if_otus.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_otus.c,v 1.23 2010/10/30 11:52:29 damien Exp $ */
+/* $OpenBSD: if_otus.c,v 1.24 2010/10/30 18:03:43 damien Exp $ */
/*-
* Copyright (c) 2009 Damien Bergamini <damien.bergamini@free.fr>
@@ -1383,7 +1383,6 @@ otus_tx(struct otus_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
xferlen = sizeof (*head) + m->m_pkthdr.len;
m_copydata(m, 0, m->m_pkthdr.len, (caddr_t)&head[1]);
m_freem(m);
- ieee80211_release_node(ic, ni);
DPRINTFN(5, ("tx queued=%d len=%d mac=0x%04x phy=0x%08x rate=%d\n",
sc->tx_queued, head->len, head->macctl, head->phyctl,
@@ -1394,6 +1393,8 @@ otus_tx(struct otus_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
if (__predict_false(error != USBD_IN_PROGRESS && error != 0))
return error;
+ ieee80211_release_node(ic, ni);
+
sc->tx_queued++;
sc->tx_cur = (sc->tx_cur + 1) % OTUS_TX_DATA_LIST_COUNT;
@@ -1441,6 +1442,7 @@ sendit:
bpf_mtap(ic->ic_rawbpf, m, BPF_DIRECTION_OUT);
#endif
if (otus_tx(sc, m, ni) != 0) {
+ ieee80211_release_node(ic, ni);
ifp->if_oerrors++;
continue;
}
diff --git a/sys/dev/usb/if_run.c b/sys/dev/usb/if_run.c
index 258c591bf36..f23a5b6d724 100644
--- a/sys/dev/usb/if_run.c
+++ b/sys/dev/usb/if_run.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_run.c,v 1.79 2010/10/30 11:59:05 damien Exp $ */
+/* $OpenBSD: if_run.c,v 1.80 2010/10/30 18:03:43 damien Exp $ */
/*-
* Copyright (c) 2008-2010 Damien Bergamini <damien.bergamini@free.fr>
@@ -2191,7 +2191,6 @@ run_tx(struct run_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
m_copydata(m, 0, m->m_pkthdr.len, (caddr_t)(txwi + 1));
m_freem(m);
- ieee80211_release_node(ic, ni);
xferlen += sizeof (*txd) + 4;
@@ -2201,6 +2200,8 @@ run_tx(struct run_softc *sc, struct mbuf *m, struct ieee80211_node *ni)
if (__predict_false(error != USBD_IN_PROGRESS && error != 0))
return error;
+ ieee80211_release_node(ic, ni);
+
ring->cur = (ring->cur + 1) % RUN_TX_RING_COUNT;
if (++ring->queued >= RUN_TX_RING_COUNT)
sc->qfullmsk |= 1 << qid;
@@ -2249,6 +2250,7 @@ sendit:
bpf_mtap(ic->ic_rawbpf, m, BPF_DIRECTION_OUT);
#endif
if (run_tx(sc, m, ni) != 0) {
+ ieee80211_release_node(ic, ni);
ifp->if_oerrors++;
continue;
}