#define IEEE80211_TX_OK                0
 #define IEEE80211_TX_AGAIN     1
 #define IEEE80211_TX_FRAG_AGAIN        2
+#define IEEE80211_TX_PENDING   3
 
 /* misc utils */
 
 
        if (skb) {
                if (netif_subqueue_stopped(local->mdev, skb))
-                       return IEEE80211_TX_AGAIN;
+                       return IEEE80211_TX_PENDING;
 
                ret = local->ops->tx(local_to_hw(local), skb);
                if (ret)
                 * queues, there's no reason for a driver to reject
                 * a frame there, warn and drop it.
                 */
-               if (WARN_ON(info->flags & IEEE80211_TX_CTL_AMPDU))
-                       goto drop;
+               if (ret != IEEE80211_TX_PENDING)
+                       if (WARN_ON(info->flags & IEEE80211_TX_CTL_AMPDU))
+                               goto drop;
 
                store = &local->pending_packet[queue];