From 64454afb7cd7ad15bb07f0d0b46db7389f9ce2b0 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Mon, 9 May 2022 13:15:18 +0900 Subject: [PATCH] nvme: disconnect() sets and reconnect_async() clears prepare_for_reset The following patches swaps the ordering of destrloying I/O qpairs and disconnecting a controller for PCIe transport. prepare_for_reset is a flag for PCIe transport. Signed-off-by: Shuhei Matsumoto Change-Id: I3009de9fea089fc93ecf87adba42e85c9a77e715 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12582 Community-CI: Mellanox Build Bot Community-CI: Broadcom CI Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Michael Haeuptle Reviewed-by: Ben Walker --- lib/nvme/nvme_ctrlr.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 74ddf8901..30bbab3a6 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -1634,8 +1634,6 @@ nvme_ctrlr_disconnect(struct spdk_nvme_ctrlr *ctrlr) { struct spdk_nvme_qpair *qpair; - ctrlr->prepare_for_reset = false; - if (ctrlr->is_resetting || ctrlr->is_removed) { /* * Controller is already resetting or has been removed. Return @@ -1648,6 +1646,7 @@ nvme_ctrlr_disconnect(struct spdk_nvme_ctrlr *ctrlr) ctrlr->is_resetting = true; ctrlr->is_failed = false; ctrlr->is_disconnecting = true; + ctrlr->prepare_for_reset = true; NVME_CTRLR_NOTICELOG(ctrlr, "resetting controller\n"); @@ -1702,6 +1701,8 @@ spdk_nvme_ctrlr_reconnect_async(struct spdk_nvme_ctrlr *ctrlr) { nvme_robust_mutex_lock(&ctrlr->ctrlr_lock); + ctrlr->prepare_for_reset = false; + /* Set the state back to INIT to cause a full hardware reset. */ nvme_ctrlr_set_state(ctrlr, NVME_CTRLR_STATE_INIT, NVME_TIMEOUT_INFINITE); @@ -4157,6 +4158,7 @@ nvme_ctrlr_destruct_async(struct spdk_nvme_ctrlr *ctrlr, NVME_CTRLR_DEBUGLOG(ctrlr, "Prepare to destruct SSD\n"); + ctrlr->prepare_for_reset = false; ctrlr->is_destructed = true; spdk_nvme_qpair_process_completions(ctrlr->adminq, 0);