Commit 0b8d2443 authored by Aleksey Marchuk's avatar Aleksey Marchuk Committed by Tomasz Zawadzki
Browse files

nvmf/rdma: Fix destroy of qpair without a poll group



A qpair might be destoryed when it failed to be added to
a poll group (i.e. due to port down event and destroy of pollers)
In that case qpair->group pointer is still valid but other
rdma-specific parameters could be set incorrectly, e.g. the
poller pointer might be NULL. We should check this pointer
before calling nvmf_rdma_qpair_process_pending since the last
function tries to dereference this pointer.

Fixes issue #3655

Change-Id: Ia2b443762e3b49b21f4a2b27694dcc3b25c258af
Signed-off-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/25916


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
parent 7174280a
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -3465,7 +3465,10 @@ nvmf_rdma_destroy_drained_qpair(struct spdk_nvmf_rdma_qpair *rqpair)
	struct spdk_nvmf_rdma_transport *rtransport = SPDK_CONTAINEROF(rqpair->qpair.transport,
			struct spdk_nvmf_rdma_transport, transport);

	if (rqpair->poller) {
		/* a qpair might be destroyed before being added to a poll group */
		nvmf_rdma_qpair_process_pending(rtransport, rqpair, true);
	}

	/* nvmf_rdma_close_qpair is not called */
	if (!rqpair->to_close) {