From d953072d21b4ef96b606480ec747226878442ab8 Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Fri, 25 Jun 2021 15:54:25 +0200 Subject: [PATCH] nvme: add option to keep existing timeout It will allow the async callbacks to retain the existing timeout while changing controller's state. Signed-off-by: Konrad Sztyber Change-Id: I4210f2cf7d4171444c338b8926334b985129a6c7 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8613 Tested-by: SPDK CI Jenkins Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Reviewed-by: Shuhei Matsumoto Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris --- lib/nvme/nvme_ctrlr.c | 6 ++++++ lib/nvme/nvme_internal.h | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 9aa38223a..f34b07daa 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -1312,6 +1312,12 @@ nvme_ctrlr_set_state(struct spdk_nvme_ctrlr *ctrlr, enum nvme_ctrlr_state state, uint64_t ticks_per_ms, timeout_in_ticks, now_ticks; ctrlr->state = state; + if (timeout_in_ms == NVME_TIMEOUT_KEEP_EXISTING) { + NVME_CTRLR_DEBUGLOG(ctrlr, "setting state to %s (keeping existing timeout)\n", + nvme_ctrlr_state_string(ctrlr->state)); + return; + } + if (timeout_in_ms == NVME_TIMEOUT_INFINITE) { goto inf; } diff --git a/lib/nvme/nvme_internal.h b/lib/nvme/nvme_internal.h index a2875b690..721c6b942 100644 --- a/lib/nvme/nvme_internal.h +++ b/lib/nvme/nvme_internal.h @@ -740,7 +740,8 @@ enum nvme_ctrlr_state { NVME_CTRLR_STATE_ERROR }; -#define NVME_TIMEOUT_INFINITE 0 +#define NVME_TIMEOUT_INFINITE 0 +#define NVME_TIMEOUT_KEEP_EXISTING UINT64_MAX struct spdk_nvme_ctrlr_aer_completion_list { struct spdk_nvme_cpl cpl;