]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/nvme/target/rdma.c
nvmet-rdma: don't forget to delete a queue from the list of connection failed
[karo-tx-linux.git] / drivers / nvme / target / rdma.c
index cf60759cc169e17fbff58c147061d3e5cffd26a2..8c06675c230597374cce222621763a30d61deddf 100644 (file)
@@ -1066,6 +1066,7 @@ nvmet_rdma_alloc_queue(struct nvmet_rdma_device *ndev,
        spin_lock_init(&queue->rsp_wr_wait_lock);
        INIT_LIST_HEAD(&queue->free_rsps);
        spin_lock_init(&queue->rsps_lock);
+       INIT_LIST_HEAD(&queue->queue_list);
 
        queue->idx = ida_simple_get(&nvmet_rdma_queue_ida, 0, 0, GFP_KERNEL);
        if (queue->idx < 0) {
@@ -1269,7 +1270,12 @@ static void nvmet_rdma_queue_connect_fail(struct rdma_cm_id *cm_id,
 {
        WARN_ON_ONCE(queue->state != NVMET_RDMA_Q_CONNECTING);
 
-       pr_err("failed to connect queue\n");
+       mutex_lock(&nvmet_rdma_queue_mutex);
+       if (!list_empty(&queue->queue_list))
+               list_del_init(&queue->queue_list);
+       mutex_unlock(&nvmet_rdma_queue_mutex);
+
+       pr_err("failed to connect queue %d\n", queue->idx);
        schedule_work(&queue->release_work);
 }