diff options
Diffstat (limited to 'package/madwifi/patches/372-queue_vif.patch')
| -rw-r--r-- | package/madwifi/patches/372-queue_vif.patch | 39 | 
1 files changed, 39 insertions, 0 deletions
| diff --git a/package/madwifi/patches/372-queue_vif.patch b/package/madwifi/patches/372-queue_vif.patch new file mode 100644 index 000000000..246798604 --- /dev/null +++ b/package/madwifi/patches/372-queue_vif.patch @@ -0,0 +1,39 @@ +--- a/net80211/ieee80211_input.c ++++ b/net80211/ieee80211_input.c +@@ -1181,6 +1181,7 @@ + 		} + 		if (skb1 != NULL) { + 			struct ieee80211_node *ni_tmp; ++			int ret; + 			skb1->dev = dev; + 			skb_reset_mac_header(skb1); + 			skb_set_network_header(skb1, sizeof(struct ether_header)); +@@ -1188,7 +1189,12 @@ + 			skb1->protocol = __constant_htons(ETH_P_802_2); + 			/* XXX insert vlan tag before queue it? */ + 			ni_tmp = SKB_CB(skb1)->ni; /* remember node so we can free it */ +-			if (dev_queue_xmit(skb1) == NET_XMIT_DROP) { ++			ret = dev->hard_start_xmit(skb1, dev); ++ ++			if (ret == NETDEV_TX_BUSY) ++				ieee80211_dev_kfree_skb(&skb1); ++ ++			if (ret != NETDEV_TX_OK) { + 				/* If queue dropped the packet because device was + 				 * too busy */ + 				vap->iv_devstats.tx_dropped++; +--- a/net80211/ieee80211_output.c ++++ b/net80211/ieee80211_output.c +@@ -329,9 +329,10 @@ + 	/* Dispatch the packet to the parent device */ + 	skb->dev = vap->iv_ic->ic_dev; +  +-	if (dev_queue_xmit(skb) == NET_XMIT_DROP) ++	if (netif_queue_stopped(skb->dev)) ++		ieee80211_dev_kfree_skb(&skb); ++	else if (dev_queue_xmit(skb) == NET_XMIT_DROP) + 		vap->iv_devstats.tx_dropped++; +- + } +  + /* | 
