diff --git a/lib/nvmf/ctrlr.c b/lib/nvmf/ctrlr.c index a872a0d59..c84c56e37 100644 --- a/lib/nvmf/ctrlr.c +++ b/lib/nvmf/ctrlr.c @@ -409,6 +409,16 @@ nvmf_ctrlr_create(struct spdk_nvmf_subsystem *subsystem, ctrlr->dif_insert_or_strip = transport->opts.dif_insert_or_strip; + if (ctrlr->subsys->subtype == SPDK_NVMF_SUBTYPE_NVME) { + ctrlr->listener = nvmf_subsystem_find_listener(ctrlr->subsys, + req->qpair->trid); + if (!ctrlr->listener) { + SPDK_ERRLOG("Listener was not found\n"); + free(ctrlr); + return NULL; + } + } + req->qpair->ctrlr = ctrlr; spdk_thread_send_msg(subsystem->thread, _nvmf_subsystem_add_ctrlr, req); diff --git a/lib/nvmf/nvmf_internal.h b/lib/nvmf/nvmf_internal.h index c151fb03e..eb831773b 100644 --- a/lib/nvmf/nvmf_internal.h +++ b/lib/nvmf/nvmf_internal.h @@ -216,6 +216,8 @@ struct spdk_nvmf_ctrlr { struct spdk_thread *thread; struct spdk_bit_array *qpair_mask; + const struct spdk_nvmf_subsystem_listener *listener; + struct spdk_nvmf_request *aer_req[NVMF_MAX_ASYNC_EVENTS]; union spdk_nvme_async_event_completion notice_event; union spdk_nvme_async_event_completion reservation_event; diff --git a/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c b/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c index 1da8f9d54..75cb6a803 100644 --- a/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c +++ b/test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c @@ -119,6 +119,12 @@ DEFINE_STUB(spdk_nvmf_subsystem_listener_allowed, (struct spdk_nvmf_subsystem *subsystem, const struct spdk_nvme_transport_id *trid), true); +DEFINE_STUB(nvmf_subsystem_find_listener, + struct spdk_nvmf_subsystem_listener *, + (struct spdk_nvmf_subsystem *subsystem, + const struct spdk_nvme_transport_id *trid), + (void *)0x1); + DEFINE_STUB(nvmf_bdev_ctrlr_read_cmd, int, (struct spdk_bdev *bdev, struct spdk_bdev_desc *desc, struct spdk_io_channel *ch, diff --git a/test/unit/lib/nvmf/tcp.c/tcp_ut.c b/test/unit/lib/nvmf/tcp.c/tcp_ut.c index a6d6d9da3..a20ade5f1 100644 --- a/test/unit/lib/nvmf/tcp.c/tcp_ut.c +++ b/test/unit/lib/nvmf/tcp.c/tcp_ut.c @@ -83,6 +83,12 @@ DEFINE_STUB(spdk_nvmf_subsystem_listener_allowed, (struct spdk_nvmf_subsystem *subsystem, const struct spdk_nvme_transport_id *trid), true); +DEFINE_STUB(nvmf_subsystem_find_listener, + struct spdk_nvmf_subsystem_listener *, + (struct spdk_nvmf_subsystem *subsystem, + const struct spdk_nvme_transport_id *trid), + (void *)0x1); + DEFINE_STUB_V(nvmf_get_discovery_log_page, (struct spdk_nvmf_tgt *tgt, const char *hostnqn, struct iovec *iov, uint32_t iovcnt, uint64_t offset, uint32_t length));