static void nvmet_rdma_remove_one(struct ib_device *ib_device, void *client_data)
 {
-       struct nvmet_rdma_queue *queue;
+       struct nvmet_rdma_queue *queue, *tmp;
 
        /* Device is being removed, delete all queues using this device */
        mutex_lock(&nvmet_rdma_queue_mutex);
-       list_for_each_entry(queue, &nvmet_rdma_queue_list, queue_list) {
+       list_for_each_entry_safe(queue, tmp, &nvmet_rdma_queue_list,
+                                queue_list) {
                if (queue->dev->device != ib_device)
                        continue;
 
                pr_info("Removing queue %d\n", queue->idx);
+               list_del_init(&queue->queue_list);
                __nvmet_rdma_queue_disconnect(queue);
        }
        mutex_unlock(&nvmet_rdma_queue_mutex);