From 5d9d52fd3c85878d54618ac61da753e7bc63a51d Mon Sep 17 00:00:00 2001 From: Seth Howell Date: Tue, 17 Mar 2020 12:45:30 -0700 Subject: [PATCH] lib/nvme: add a disconnect_qpair public API. Also modify some api documentation to indicate how the new API should be used. Signed-off-by: Seth Howell Change-Id: Icdbfb09aceda28635fdd191c520b36c692c2c100 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1340 Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- include/spdk/nvme.h | 15 +++++++++++++++ lib/nvme/nvme_ctrlr.c | 10 ++++++++++ 2 files changed, 25 insertions(+) diff --git a/include/spdk/nvme.h b/include/spdk/nvme.h index 435be6271..532b74703 100644 --- a/include/spdk/nvme.h +++ b/include/spdk/nvme.h @@ -1211,6 +1211,21 @@ struct spdk_nvme_qpair *spdk_nvme_ctrlr_alloc_io_qpair(struct spdk_nvme_ctrlr *c */ int spdk_nvme_ctrlr_connect_io_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpair); +/** + * Disconnect the given I/O qpair. + * + * This function must be called from the same thread as spdk_nvme_qpair_process_completions + * and the spdk_nvme_ns_cmd_* functions. + * + * After disconnect, calling spdk_nvme_qpair_process_completions or one of the + * spdk_nvme_ns_cmd* on a qpair will result in a return value of -ENXIO. A + * disconnected qpair may be reconnected with either the spdk_nvme_ctrlr_connect_io_qpair + * or spdk_nvme_ctrlr_reconnect_io_qpair APIs. + * + * \param qpair The qpair to disconnect. + */ +void spdk_nvme_ctrlr_disconnect_io_qpair(struct spdk_nvme_qpair *qpair); + /** * Attempt to reconnect the given qpair. * diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 7c174e187..28499da8c 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -371,6 +371,16 @@ spdk_nvme_ctrlr_connect_io_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme return rc; } +void +spdk_nvme_ctrlr_disconnect_io_qpair(struct spdk_nvme_qpair *qpair) +{ + struct spdk_nvme_ctrlr *ctrlr = qpair->ctrlr; + + nvme_robust_mutex_lock(&ctrlr->ctrlr_lock); + nvme_transport_ctrlr_disconnect_qpair(ctrlr, qpair); + nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock); +} + struct spdk_nvme_qpair * spdk_nvme_ctrlr_alloc_io_qpair(struct spdk_nvme_ctrlr *ctrlr, const struct spdk_nvme_io_qpair_opts *user_opts,