45 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
Index: madwifi-trunk-r3314/ath/if_ath.c
 | 
						|
===================================================================
 | 
						|
--- madwifi-trunk-r3314.orig/ath/if_ath.c	2008-02-08 04:11:11.775823441 +0100
 | 
						|
+++ madwifi-trunk-r3314/ath/if_ath.c	2008-02-08 05:46:16.761139918 +0100
 | 
						|
@@ -3308,17 +3308,18 @@
 | 
						|
 	 * without affecting any other bridge ports. */
 | 
						|
 	if (skb_cloned(skb)) {
 | 
						|
 		/* Remember the original SKB so we can free up our references */
 | 
						|
-		struct sk_buff *skb_orig = skb;
 | 
						|
-		skb = skb_copy(skb, GFP_ATOMIC);
 | 
						|
-		if (skb == NULL) {
 | 
						|
+		struct sk_buff *skb_new;
 | 
						|
+		skb_new = skb_copy(skb, GFP_ATOMIC);
 | 
						|
+		if (skb_new == NULL) {
 | 
						|
 			DPRINTF(sc, ATH_DEBUG_XMIT,
 | 
						|
 				"Dropping; skb_copy failure.\n");
 | 
						|
 			/* No free RAM, do not requeue! */
 | 
						|
 			goto hardstart_fail;
 | 
						|
 		}
 | 
						|
-		ieee80211_skb_copy_noderef(skb_orig, skb);
 | 
						|
-		ieee80211_dev_kfree_skb(&skb_orig);
 | 
						|
-	} 
 | 
						|
+		ieee80211_skb_copy_noderef(skb, skb_new);
 | 
						|
+		ieee80211_dev_kfree_skb(&skb);
 | 
						|
+		skb = skb_new;
 | 
						|
+	}
 | 
						|
 	eh = (struct ether_header *)skb->data;
 | 
						|
 
 | 
						|
 #ifdef ATH_SUPERG_FF
 | 
						|
@@ -3584,11 +3585,13 @@
 | 
						|
 	 */
 | 
						|
 	error = ath_tx_start(dev, SKB_CB(skb)->ni, bf, skb, 0);
 | 
						|
 	if (error)
 | 
						|
-		goto bad;
 | 
						|
+		return error;
 | 
						|
 
 | 
						|
 	sc->sc_stats.ast_tx_mgmt++;
 | 
						|
 	return 0;
 | 
						|
 bad:
 | 
						|
+	if (skb)
 | 
						|
+		ieee80211_dev_kfree_skb(&skb);
 | 
						|
 	ath_return_txbuf(sc, &bf);
 | 
						|
 	return error;
 | 
						|
 }
 |