if (cmd_type == 1) {
                unsigned int pkt_rc, seq_no;
                bool tok;
-               struct sk_buff *skb;
+               struct sk_buff *skb, *iter;
                struct ieee80211_hdr *ieee80211hdr;
                unsigned long flags;
 
                seq_no = (val >> 16) & 0xFFF;
 
                spin_lock_irqsave(&priv->b_tx_status.queue.lock, flags);
-               skb_queue_reverse_walk(&priv->b_tx_status.queue, skb) {
-                       ieee80211hdr = (struct ieee80211_hdr *)skb->data;
+               skb = NULL;
+               skb_queue_reverse_walk(&priv->b_tx_status.queue, iter) {
+                       ieee80211hdr = (struct ieee80211_hdr *)iter->data;
 
                        /*
                         * While testing, it was discovered that the seq_no
                         * it's unlikely we wrongly ack some sent data
                         */
                        if ((le16_to_cpu(ieee80211hdr->seq_ctrl)
-                           & 0xFFF) == seq_no)
+                            & 0xFFF) == seq_no) {
+                               skb = iter;
                                break;
+                       }
                }
-               if (skb != (struct sk_buff *) &priv->b_tx_status.queue) {
+               if (skb) {
                        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 
                        __skb_unlink(skb, &priv->b_tx_status.queue);