|
@@ -1352,7 +1352,13 @@ static int nvmet_rdma_cm_handler(struct rdma_cm_id *cm_id,
|
|
|
case RDMA_CM_EVENT_ADDR_CHANGE:
|
|
|
case RDMA_CM_EVENT_DISCONNECTED:
|
|
|
case RDMA_CM_EVENT_TIMEWAIT_EXIT:
|
|
|
- nvmet_rdma_queue_disconnect(queue);
|
|
|
+ /*
|
|
|
+ * We might end up here when we already freed the qp
|
|
|
+ * which means queue release sequence is in progress,
|
|
|
+ * so don't get in the way...
|
|
|
+ */
|
|
|
+ if (queue)
|
|
|
+ nvmet_rdma_queue_disconnect(queue);
|
|
|
break;
|
|
|
case RDMA_CM_EVENT_DEVICE_REMOVAL:
|
|
|
ret = nvmet_rdma_device_removal(cm_id, queue);
|