linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] rt2x00mac: In error case stop netdev queue, free skb and return NETDEV_TX_OK
@ 2008-07-23  9:27 Daniel Wagner
  2008-07-23 16:22 ` Ivo van Doorn
  0 siblings, 1 reply; 6+ messages in thread
From: Daniel Wagner @ 2008-07-23  9:27 UTC (permalink / raw)
  To: linux-wireless; +Cc: Ivo van Doorn, Daniel Wagner

It is not allowed to use NETDEV_TX_BUSY in tx path anymore.

Signed-off-by: Daniel Wagner <wagi@monom.org>
Cc: Ivo van Doorn <IvDoorn@gmail.com>
---
 drivers/net/wireless/rt2x00/rt2x00mac.c |   13 ++++++++-----
 1 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c
index 77af1df..64a70c6 100644
--- a/drivers/net/wireless/rt2x00/rt2x00mac.c
+++ b/drivers/net/wireless/rt2x00/rt2x00mac.c
@@ -46,7 +46,7 @@ static int rt2x00mac_tx_rts_cts(struct rt2x00_dev *rt2x00dev,
 	skb = dev_alloc_skb(size + rt2x00dev->hw->extra_tx_headroom);
 	if (!skb) {
 		WARNING(rt2x00dev, "Failed to create RTS/CTS frame.\n");
-		return NETDEV_TX_BUSY;
+		return -1;
 	}
 
 	skb_reserve(skb, rt2x00dev->hw->extra_tx_headroom);
@@ -84,7 +84,7 @@ static int rt2x00mac_tx_rts_cts(struct rt2x00_dev *rt2x00dev,
 
 	if (rt2x00queue_write_tx_frame(queue, skb)) {
 		WARNING(rt2x00dev, "Failed to send RTS/CTS frame.\n");
-		return NETDEV_TX_BUSY;
+		return -1;
 	}
 
 	return NETDEV_TX_OK;
@@ -143,12 +143,14 @@ int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
 	    !rt2x00dev->ops->hw->set_rts_threshold) {
 		if (rt2x00queue_available(queue) <= 1) {
 			ieee80211_stop_queue(rt2x00dev->hw, qid);
-			return NETDEV_TX_BUSY;
+			dev_kfree_skb_any(skb);
+			return NETDEV_TX_OK;
 		}
 
 		if (rt2x00mac_tx_rts_cts(rt2x00dev, queue, skb)) {
 			ieee80211_stop_queue(rt2x00dev->hw, qid);
-			return NETDEV_TX_BUSY;
+			dev_kfree_skb_any(skb);
+			return NETDEV_TX_OK;
 		}
 	}
 
@@ -166,7 +168,8 @@ int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb)
 
 	if (rt2x00queue_write_tx_frame(queue, skb)) {
 		ieee80211_stop_queue(rt2x00dev->hw, qid);
-		return NETDEV_TX_BUSY;
+		dev_kfree_skb_any(skb);
+		return NETDEV_TX_OK;
 	}
 
 	if (rt2x00queue_threshold(queue))
-- 
1.5.6.2


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2008-07-23 16:51 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-23  9:27 [PATCH] rt2x00mac: In error case stop netdev queue, free skb and return NETDEV_TX_OK Daniel Wagner
2008-07-23 16:22 ` Ivo van Doorn
2008-07-23 16:32   ` Johannes Berg
2008-07-23 16:40   ` Daniel Wagner
2008-07-23 17:02     ` Ivo van Doorn
2008-07-23 16:51       ` Daniel Wagner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).