mac80211: do not fragment while aggregation is in use
authorRon Rindjunsky <ron.rindjunsky@intel.com>
Thu, 12 Jun 2008 12:42:29 +0000 (15:42 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Sat, 14 Jun 2008 16:18:10 +0000 (12:18 -0400)
This patch denies the use of framentation while ampdu is used.

Signed-off-by: Ron Rindjunsky <ron.rindjunsky@intel.com>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/tx.c

index 1ad9e664f2875219de301106302bcc18723c5cb2..195cb6dd02a0fd0f5a49e0cf3b66eb1b1ad0e0eb 100644 (file)
@@ -660,9 +660,8 @@ ieee80211_tx_h_fragment(struct ieee80211_tx_data *tx)
 
        /*
         * Warn when submitting a fragmented A-MPDU frame and drop it.
-        * This is an error and needs to be fixed elsewhere, but when
-        * done needs to take care of monitor interfaces (injection)
-        * etc.
+        * This scenario is handled in __ieee80211_tx_prepare but extra
+        * caution taken here as fragmented ampdu may cause Tx stop.
         */
        if (WARN_ON(tx->flags & IEEE80211_TX_CTL_AMPDU ||
                    skb_get_queue_mapping(tx->skb) >=
@@ -981,7 +980,8 @@ __ieee80211_tx_prepare(struct ieee80211_tx_data *tx,
        if (tx->flags & IEEE80211_TX_FRAGMENTED) {
                if ((tx->flags & IEEE80211_TX_UNICAST) &&
                    skb->len + FCS_LEN > local->fragmentation_threshold &&
-                   !local->ops->set_frag_threshold)
+                   !local->ops->set_frag_threshold &&
+                   !(info->flags & IEEE80211_TX_CTL_AMPDU))
                        tx->flags |= IEEE80211_TX_FRAGMENTED;
                else
                        tx->flags &= ~IEEE80211_TX_FRAGMENTED;