unsigned short fc = le16_to_cpu(hdr->frame_control);
        struct Qdisc *qdisc;
        struct sta_info *sta;
-       int err;
-       u16 queue;
+       int err, queue;
        u8 tid;
 
        if (pkt_data->flags & IEEE80211_TXPD_REQUEUE) {
                rcu_read_unlock();
        }
 
-       tid = skb->priority & QOS_CONTROL_TAG1D_MASK;
-       pkt_data->queue = (unsigned int) queue;
-       qdisc = q->queues[queue];
-       err = qdisc->enqueue(skb, qdisc);
-       if (err == NET_XMIT_SUCCESS) {
-               qd->q.qlen++;
-               qd->bstats.bytes += skb->len;
-               qd->bstats.packets++;
-               return NET_XMIT_SUCCESS;
+       if (unlikely(queue < 0)) {
+                       kfree_skb(skb);
+                       err = NET_XMIT_DROP;
+       } else {
+               tid = skb->priority & QOS_CONTROL_TAG1D_MASK;
+               pkt_data->queue = (unsigned int) queue;
+               qdisc = q->queues[queue];
+               err = qdisc->enqueue(skb, qdisc);
+               if (err == NET_XMIT_SUCCESS) {
+                       qd->q.qlen++;
+                       qd->bstats.bytes += skb->len;
+                       qd->bstats.packets++;
+                       return NET_XMIT_SUCCESS;
+               }
        }
        qd->qstats.drops++;
        return err;