result = nvme_enable_ctrl(&dev->ctrl, cap);
        if (result)
-               goto free_nvmeq;
+               return result;
 
        nvmeq->cq_vector = 0;
        result = queue_request_irq(nvmeq);
        if (result) {
                nvmeq->cq_vector = -1;
-               goto free_nvmeq;
+               return result;
        }
 
        return result;
-
- free_nvmeq:
-       nvme_free_queues(dev, 0);
-       return result;
 }
 
 static bool nvme_should_reset(struct nvme_dev *dev, u32 csts)
        max = min(dev->max_qid, dev->queue_count - 1);
        for (i = dev->online_queues; i <= max; i++) {
                ret = nvme_create_queue(dev->queues[i], i);
-               if (ret) {
-                       nvme_free_queues(dev, i);
+               if (ret)
                        break;
-               }
        }
 
        /*
        result = queue_request_irq(adminq);
        if (result) {
                adminq->cq_vector = -1;
-               goto free_queues;
+               return result;
        }
        return nvme_create_io_queues(dev);
-
- free_queues:
-       nvme_free_queues(dev, 1);
-       return result;
 }
 
 static void nvme_del_queue_end(struct request *req, int error)