Browse Source

rt2x00: Properly clean up beacon skbs.

The skbs containing the beacons weren't properly cleaned up for rt2400pci, rt2500pci,
rt61pci, and rt73usb. Clean up those skbs in the manner appropriate for each driver.

Signed-off-by: Gertjan van Wingerde <gwingerde@kpnplanet.nl>
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Gertjan van Wingerde 17 years ago
parent
commit
c95edf5432

+ 6 - 0
drivers/net/wireless/rt2x00/rt2x00dev.c

@@ -474,6 +474,12 @@ static void rt2x00lib_beacondone_iter(void *data, u8 *mac,
 	    vif->type != IEEE80211_IF_TYPE_IBSS)
 	    vif->type != IEEE80211_IF_TYPE_IBSS)
 		return;
 		return;
 
 
+	/*
+	 * Clean up the beacon skb.
+	 */
+	dev_kfree_skb_irq(intf->beacon->skb);
+	intf->beacon->skb = NULL;
+
 	spin_lock(&intf->lock);
 	spin_lock(&intf->lock);
 	intf->delayed_flags |= DELAYED_UPDATE_BEACON;
 	intf->delayed_flags |= DELAYED_UPDATE_BEACON;
 	spin_unlock(&intf->lock);
 	spin_unlock(&intf->lock);

+ 6 - 0
drivers/net/wireless/rt2x00/rt61pci.c

@@ -2402,6 +2402,12 @@ static int rt61pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb)
 				      skb->data, skb->len);
 				      skb->data, skb->len);
 	rt61pci_kick_tx_queue(rt2x00dev, QID_BEACON);
 	rt61pci_kick_tx_queue(rt2x00dev, QID_BEACON);
 
 
+	/*
+	 * Clean up beacon skb.
+	 */
+	dev_kfree_skb_any(skb);
+	intf->beacon->skb = NULL;
+
 	return 0;
 	return 0;
 }
 }
 
 

+ 6 - 0
drivers/net/wireless/rt2x00/rt73usb.c

@@ -2001,6 +2001,12 @@ static int rt73usb_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb)
 				 REGISTER_TIMEOUT32(skb->len));
 				 REGISTER_TIMEOUT32(skb->len));
 	rt73usb_kick_tx_queue(rt2x00dev, QID_BEACON);
 	rt73usb_kick_tx_queue(rt2x00dev, QID_BEACON);
 
 
+	/*
+	 * Clean up the beacon skb.
+	 */
+	dev_kfree_skb(skb);
+	intf->beacon->skb = NULL;
+
 	return 0;
 	return 0;
 }
 }