uint32_t        fw_tgt_reported:1;
                uint32_t        bbcr_enable:1;
                uint32_t        qpairs_available:1;
+               uint32_t        qpairs_req_created:1;
+               uint32_t        qpairs_rsp_created:1;
        } flags;
 
        atomic_t        loop_state;
 
 
 int qla2xxx_delete_qpair(struct scsi_qla_host *vha, struct qla_qpair *qpair)
 {
-       int ret;
+       int ret = QLA_FUNCTION_FAILED;
        struct qla_hw_data *ha = qpair->hw;
 
+       if (!vha->flags.qpairs_req_created && !vha->flags.qpairs_rsp_created)
+               goto fail;
+
        qpair->delete_in_progress = 1;
        while (atomic_read(&qpair->ref_count))
                msleep(500);
        clear_bit(qpair->id, ha->qpair_qid_map);
        ha->num_qpairs--;
        list_del(&qpair->qp_list_elem);
-       if (list_empty(&vha->qp_list))
+       if (list_empty(&vha->qp_list)) {
                vha->flags.qpairs_available = 0;
+               vha->flags.qpairs_req_created = 0;
+               vha->flags.qpairs_rsp_created = 0;
+       }
        mempool_destroy(qpair->srb_mempool);
        kfree(qpair);
        mutex_unlock(&ha->mq_lock);
 
        int ret = 0;
        struct req_que *req = NULL;
        struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev);
+       struct scsi_qla_host *vha = pci_get_drvdata(ha->pdev);
        uint16_t que_id = 0;
        device_reg_t *reg;
        uint32_t cnt;
                        mutex_unlock(&ha->mq_lock);
                        goto que_failed;
                }
+               vha->flags.qpairs_req_created = 1;
        }
 
        return req->id;
        int ret = 0;
        struct rsp_que *rsp = NULL;
        struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev);
+       struct scsi_qla_host *vha = pci_get_drvdata(ha->pdev);
        uint16_t que_id = 0;
        device_reg_t *reg;
 
                        mutex_unlock(&ha->mq_lock);
                        goto que_failed;
                }
+               vha->flags.qpairs_rsp_created = 1;
        }
        rsp->req = NULL;
 
 
        ha->base_qpair->rsp = rsp;
        ha->base_qpair->vha = vha;
        ha->base_qpair->qp_lock_ptr = &ha->hardware_lock;
+       /* init qpair to this cpu. Will adjust at run time. */
        ha->base_qpair->msix = &ha->msix_entries[QLA_MSIX_RSP_Q];
        INIT_LIST_HEAD(&ha->base_qpair->hints_list);
        qla_cpu_update(rsp->qpair, smp_processor_id());