ath9k: fix clearing expired A-MPDU subframes in tx completion
authorFelix Fietkau <nbd@openwrt.org>
Tue, 6 Aug 2013 12:18:09 +0000 (14:18 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 9 Aug 2013 19:58:15 +0000 (15:58 -0400)
When the tid aggregation state has been marked as inactive, free
completed tx packets immediately. When a new aggregation session has not
been initialized yet, the BAW checks do not recognize it as expired.

Might fix potential stalls in setting up a new aggregation session.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/xmit.c

index e69f7fef788774ca07acb8a9548ca0ba88e405d7..3ede3e95a751e7b06d0225604f8704b92642ed38 100644 (file)
@@ -520,7 +520,8 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
                tx_info = IEEE80211_SKB_CB(skb);
                fi = get_frame_info(skb);
 
-               if (!BAW_WITHIN(tid->seq_start, tid->baw_size, seqno)) {
+               if (!BAW_WITHIN(tid->seq_start, tid->baw_size, seqno) ||
+                   !tid->active) {
                        /*
                         * Outside of the current BlockAck window,
                         * maybe part of a previous session