From b9a187977d66fd20a4dd10ba25c5c8f6ae1b72af Mon Sep 17 00:00:00 2001 From: Seth Howell Date: Thu, 6 Feb 2020 17:33:07 -0700 Subject: [PATCH] nvme: add poll group handling to qpair path. Signed-off-by: Seth Howell Change-Id: I9116cdcb5bbeb16ee74decee5586bda9a42090aa Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/633 Tested-by: SPDK CI Jenkins Community-CI: Broadcom CI Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/nvme/nvme_ctrlr.c | 5 +++- lib/nvme/nvme_transport.c | 24 +++++++++++++++---- .../lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c | 2 ++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 28499da8c..33900faed 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -500,7 +500,6 @@ nvme_ctrlr_disconnect_qpair(struct spdk_nvme_qpair *qpair) struct spdk_nvme_ctrlr *ctrlr = qpair->ctrlr; assert(ctrlr != NULL); - nvme_robust_mutex_lock(&ctrlr->ctrlr_lock); nvme_transport_ctrlr_disconnect_qpair(ctrlr, qpair); nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock); @@ -528,6 +527,10 @@ spdk_nvme_ctrlr_free_io_qpair(struct spdk_nvme_qpair *qpair) return 0; } + if (qpair->poll_group) { + spdk_nvme_poll_group_remove(qpair->poll_group->group, qpair); + } + nvme_robust_mutex_lock(&ctrlr->ctrlr_lock); nvme_ctrlr_proc_remove_io_qpair(qpair); diff --git a/lib/nvme/nvme_transport.c b/lib/nvme/nvme_transport.c index 53136de07..61cf6f0aa 100644 --- a/lib/nvme/nvme_transport.c +++ b/lib/nvme/nvme_transport.c @@ -275,13 +275,24 @@ nvme_transport_ctrlr_connect_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nv } nvme_qpair_set_state(qpair, NVME_QPAIR_CONNECTING); rc = transport->ops.ctrlr_connect_qpair(ctrlr, qpair); - if (rc == 0) { - nvme_qpair_set_state(qpair, NVME_QPAIR_CONNECTED); - qpair->transport_failure_reason = SPDK_NVME_QPAIR_FAILURE_NONE; - } else { - nvme_qpair_set_state(qpair, NVME_QPAIR_DISABLED); + if (rc != 0) { + goto err; } + nvme_qpair_set_state(qpair, NVME_QPAIR_CONNECTED); + if (qpair->poll_group) { + rc = nvme_poll_group_activate_qpair(qpair); + if (rc) { + goto err; + } + } + + qpair->transport_failure_reason = SPDK_NVME_QPAIR_FAILURE_NONE; + return rc; + +err: + nvme_transport_ctrlr_disconnect_qpair(ctrlr, qpair); + nvme_qpair_set_state(qpair, NVME_QPAIR_DISABLED); return rc; } @@ -291,6 +302,9 @@ nvme_transport_ctrlr_disconnect_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk const struct spdk_nvme_transport *transport = nvme_get_transport(ctrlr->trid.trstring); assert(transport != NULL); + if (qpair->poll_group) { + nvme_poll_group_deactivate_qpair(qpair); + } transport->ops.ctrlr_disconnect_qpair(ctrlr, qpair); } diff --git a/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c b/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c index 026157a74..349d7ee37 100644 --- a/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c +++ b/test/unit/lib/nvme/nvme_ctrlr.c/nvme_ctrlr_ut.c @@ -67,6 +67,8 @@ DEFINE_STUB(nvme_ctrlr_cmd_set_host_id, int, (struct spdk_nvme_ctrlr *ctrlr, void *host_id, uint32_t host_id_size, spdk_nvme_cmd_cb cb_fn, void *cb_arg), 0); DEFINE_STUB_V(nvme_ns_set_identify_data, (struct spdk_nvme_ns *ns)); +DEFINE_STUB(spdk_nvme_poll_group_remove, int, (struct spdk_nvme_poll_group *group, + struct spdk_nvme_qpair *qpair), 0); struct spdk_nvme_ctrlr *nvme_transport_ctrlr_construct(const struct spdk_nvme_transport_id *trid, const struct spdk_nvme_ctrlr_opts *opts,