do {
                        send_entry = cm_node->send_entry;
                        if (!send_entry)
-                               continue;
+                               break;
                        if (time_after(send_entry->timetosend, jiffies)) {
                                if (cm_node->state != NES_CM_STATE_TSA) {
                                        if ((nexttimeout >
                                                nexttimeout =
                                                        send_entry->timetosend;
                                                settimer = 1;
-                                               continue;
+                                               break;
                                        }
                                } else {
                                        free_retrans_entry(cm_node);
-                                       continue;
+                                       break;
                                }
                        }
 
                        if ((cm_node->state == NES_CM_STATE_TSA) ||
                                (cm_node->state == NES_CM_STATE_CLOSED)) {
                                free_retrans_entry(cm_node);
-                               continue;
+                               break;
                        }
 
                        if (!send_entry->retranscount ||
                                                NES_CM_EVENT_ABORTED);
                                spin_lock_irqsave(&cm_node->retrans_list_lock,
                                        flags);
-                               continue;
+                               break;
                        }
                        atomic_inc(&send_entry->skb->users);
                        cm_packets_retrans++;
                                send_entry->retrycount--;
                                nexttimeout = jiffies + NES_SHORT_TIME;
                                settimer = 1;
-                               continue;
+                               break;
                        } else {
                                cm_packets_sent++;
                        }
 
                        /* use 4k pbl */
                        nes_debug(NES_DBG_CQ, "pbl_entries=%u, use a 4k PBL\n", pbl_entries);
                        if (nesadapter->free_4kpbl == 0) {
-                               if (cqp_request->dynamic) {
-                                       spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
-                                       kfree(cqp_request);
-                               } else {
-                                       list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
-                                       spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
-                               }
+                               spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
+                               nes_free_cqp_request(nesdev, cqp_request);
                                if (!context)
                                        pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem,
                                                        nescq->hw_cq.cq_pbase);
                        /* use 256 byte pbl */
                        nes_debug(NES_DBG_CQ, "pbl_entries=%u, use a 256 byte PBL\n", pbl_entries);
                        if (nesadapter->free_256pbl == 0) {
-                               if (cqp_request->dynamic) {
-                                       spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
-                                       kfree(cqp_request);
-                               } else {
-                                       list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
-                                       spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
-                               }
+                               spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
+                               nes_free_cqp_request(nesdev, cqp_request);
                                if (!context)
                                        pci_free_consistent(nesdev->pcidev, nescq->cq_mem_size, mem,
                                                        nescq->hw_cq.cq_pbase);
                        /* Two level PBL */
                        if ((pbl_count+1) > nesadapter->free_4kpbl) {
                                nes_debug(NES_DBG_MR, "Out of 4KB Pbls for two level request.\n");
-                               if (cqp_request->dynamic) {
-                                       spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
-                                       kfree(cqp_request);
-                               } else {
-                                       list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
-                                       spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
-                               }
+                               spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
+                               nes_free_cqp_request(nesdev, cqp_request);
                                return -ENOMEM;
                        } else {
                                nesadapter->free_4kpbl -= pbl_count+1;
                } else if (residual_page_count > 32) {
                        if (pbl_count > nesadapter->free_4kpbl) {
                                nes_debug(NES_DBG_MR, "Out of 4KB Pbls.\n");
-                               if (cqp_request->dynamic) {
-                                       spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
-                                       kfree(cqp_request);
-                               } else {
-                                       list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
-                                       spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
-                               }
+                               spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
+                               nes_free_cqp_request(nesdev, cqp_request);
                                return -ENOMEM;
                        } else {
                                nesadapter->free_4kpbl -= pbl_count;
                } else {
                        if (pbl_count > nesadapter->free_256pbl) {
                                nes_debug(NES_DBG_MR, "Out of 256B Pbls.\n");
-                               if (cqp_request->dynamic) {
-                                       spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
-                                       kfree(cqp_request);
-                               } else {
-                                       list_add_tail(&cqp_request->list, &nesdev->cqp_avail_reqs);
-                                       spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
-                               }
+                               spin_unlock_irqrestore(&nesadapter->pbl_lock, flags);
+                               nes_free_cqp_request(nesdev, cqp_request);
                                return -ENOMEM;
                        } else {
                                nesadapter->free_256pbl -= pbl_count;