memcpy(ra_list->ra, ra, ETH_ALEN);
 
        ra_list->total_pkts_size = 0;
+       ra_list->total_pkts = 0;
 
        dev_dbg(adapter->dev, "info: allocated ra_list %p\n", ra_list);
 
        skb_queue_tail(&ra_list->skb_head, skb);
 
        ra_list->total_pkts_size += skb->len;
+       ra_list->total_pkts++;
 
        atomic_inc(&priv->wmm.tx_pkts_queued);
 
        return NULL;
 }
 
-/*
- * This function gets the number of packets in the Tx queue of a
- * particular RA list.
- */
-static int
-mwifiex_num_pkts_in_txq(struct mwifiex_private *priv,
-                       struct mwifiex_ra_list_tbl *ptr, int max_buf_size)
-{
-       int count = 0, total_size = 0;
-       struct sk_buff *skb, *tmp;
-
-       skb_queue_walk_safe(&ptr->skb_head, skb, tmp) {
-               total_size += skb->len;
-               if (total_size < max_buf_size)
-                       ++count;
-               else
-                       break;
-       }
-
-       return count;
-}
-
 /*
  * This function sends a single packet to firmware for transmission.
  */
        dev_dbg(adapter->dev, "data: dequeuing the packet %p %p\n", ptr, skb);
 
        ptr->total_pkts_size -= skb->len;
+       ptr->total_pkts--;
 
        if (!skb_queue_empty(&ptr->skb_head))
                skb_next = skb_peek(&ptr->skb_head);
                skb_queue_tail(&ptr->skb_head, skb);
 
                ptr->total_pkts_size += skb->len;
+               ptr->total_pkts++;
                tx_info->flags |= MWIFIEX_BUF_FLAG_REQUEUED_PKT;
                spin_unlock_irqrestore(&priv->wmm.ra_list_spinlock,
                                       ra_list_flags);
                }
 /* Minimum number of AMSDU */
 #define MIN_NUM_AMSDU 2
+
                if (mwifiex_is_amsdu_allowed(priv, tid) &&
-                   (mwifiex_num_pkts_in_txq(priv, ptr, adapter->tx_buf_size) >=
-                    MIN_NUM_AMSDU))
+                               (ptr->total_pkts >= MIN_NUM_AMSDU))
                        mwifiex_11n_aggregate_pkt(priv, ptr, INTF_HEADER_LEN,
                                                  ptr_index, flags);
                        /* ra_list_spinlock has been freed in