From 7bcff376ab03f1bd901b29a41653ac0e985441d6 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 1 Sep 2020 22:51:45 +0900 Subject: [PATCH] lib/nvmf: Add subsystem_listener to struct spdk_nvmf_ctrlr Find the subsystem listener whose trid matches req->port->trid when creating a controller, and store it in the controller. Signed-off-by: Shuhei Matsumoto Change-Id: Iea343b8d8ae827b554df2245b67aed113469c592 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4010 Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot Community-CI: Broadcom CI Reviewed-by: Ben Walker Reviewed-by: Jim Harris Reviewed-by: Aleksey Marchuk --- lib/nvmf/ctrlr.c | 10 ++++++++++ lib/nvmf/nvmf_internal.h | 2 ++ test/unit/lib/nvmf/ctrlr.c/ctrlr_ut.c | 6 ++++++ test/unit/lib/nvmf/tcp.c/tcp_ut.c | 6 ++++++ 4 files changed, 24 insertions(+) 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));