diff --git a/lib/nvme/nvme.c b/lib/nvme/nvme.c index 9393810a6..67db1f4fd 100644 --- a/lib/nvme/nvme.c +++ b/lib/nvme/nvme.c @@ -164,7 +164,7 @@ nvme_wait_for_completion(struct spdk_nvme_qpair *qpair, * \param qpair queue to poll * \param status completion status. The user must fill this structure with zeroes before calling * this function - * \param timeout_in_secs optional timeout + * \param timeout_in_usecs optional timeout * * \return 0 if command completed without error, * -EIO if command completed with error, @@ -176,13 +176,13 @@ nvme_wait_for_completion(struct spdk_nvme_qpair *qpair, int nvme_wait_for_completion_timeout(struct spdk_nvme_qpair *qpair, struct nvme_completion_poll_status *status, - uint64_t timeout_in_secs) + uint64_t timeout_in_usecs) { uint64_t timeout_tsc = 0; int rc = 0; - if (timeout_in_secs) { - timeout_tsc = spdk_get_ticks() + timeout_in_secs * spdk_get_ticks_hz(); + if (timeout_in_usecs) { + timeout_tsc = spdk_get_ticks() + timeout_in_usecs * spdk_get_ticks_hz() / SPDK_SEC_TO_USEC; } while (status->done == false) { diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index ced02e9bb..c3e57e6b4 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -653,7 +653,7 @@ static int nvme_ctrlr_set_intel_support_log_pages(struct spdk_nvme_ctrlr *ctrlr) } if (nvme_wait_for_completion_timeout(ctrlr->adminq, status, - ctrlr->opts.admin_timeout_ms / 1000)) { + ctrlr->opts.admin_timeout_ms * 1000)) { spdk_free(log_page_directory); SPDK_WARNLOG("Intel log pages not supported on Intel drive!\n"); if (!status->timed_out) { @@ -738,7 +738,7 @@ nvme_ctrlr_set_arbitration_feature(struct spdk_nvme_ctrlr *ctrlr) } if (nvme_wait_for_completion_timeout(ctrlr->adminq, status, - ctrlr->opts.admin_timeout_ms / 1000)) { + ctrlr->opts.admin_timeout_ms * 1000)) { SPDK_ERRLOG("Timeout to set arbitration feature\n"); } diff --git a/lib/nvme/nvme_fabric.c b/lib/nvme/nvme_fabric.c index 294a17cbb..1dacf8f62 100644 --- a/lib/nvme/nvme_fabric.c +++ b/lib/nvme/nvme_fabric.c @@ -43,7 +43,8 @@ #ifdef DEBUG #define NVME_FABRIC_CONNECT_COMMAND_TIMEOUT 0 #else -#define NVME_FABRIC_CONNECT_COMMAND_TIMEOUT 1 +/* 500 millisecond timeout. */ +#define NVME_FABRIC_CONNECT_COMMAND_TIMEOUT 500000 #endif static int diff --git a/lib/nvme/nvme_internal.h b/lib/nvme/nvme_internal.h index 98fec279d..c57bf505c 100644 --- a/lib/nvme/nvme_internal.h +++ b/lib/nvme/nvme_internal.h @@ -896,7 +896,7 @@ int nvme_wait_for_completion_robust_lock(struct spdk_nvme_qpair *qpair, pthread_mutex_t *robust_mutex); int nvme_wait_for_completion_timeout(struct spdk_nvme_qpair *qpair, struct nvme_completion_poll_status *status, - uint64_t timeout_in_secs); + uint64_t timeout_in_usecs); struct spdk_nvme_ctrlr_process *nvme_ctrlr_get_process(struct spdk_nvme_ctrlr *ctrlr, pid_t pid); diff --git a/test/unit/lib/nvme/nvme.c/nvme_ut.c b/test/unit/lib/nvme/nvme.c/nvme_ut.c index cf51a14bd..482bf3b00 100644 --- a/test/unit/lib/nvme/nvme.c/nvme_ut.c +++ b/test/unit/lib/nvme/nvme.c/nvme_ut.c @@ -1233,15 +1233,15 @@ test_nvme_request_check_timeout(void) } struct nvme_completion_poll_status g_status; -uint64_t completion_delay, timeout_in_secs; +uint64_t completion_delay_us, timeout_in_usecs; int g_process_comp_result; int spdk_nvme_qpair_process_completions(struct spdk_nvme_qpair *qpair, uint32_t max_completions) { - spdk_delay_us(completion_delay * spdk_get_ticks_hz()); + spdk_delay_us(completion_delay_us); - g_status.done = completion_delay < timeout_in_secs && g_process_comp_result == 0 ? true : false; + g_status.done = completion_delay_us < timeout_in_usecs && g_process_comp_result == 0 ? true : false; return g_process_comp_result; } @@ -1256,9 +1256,9 @@ test_nvme_wait_for_completion(void) /* completion timeout */ memset(&g_status, 0, sizeof(g_status)); - completion_delay = 2; - timeout_in_secs = 1; - rc = nvme_wait_for_completion_timeout(&qpair, &g_status, timeout_in_secs); + completion_delay_us = 2000000; + timeout_in_usecs = 1000000; + rc = nvme_wait_for_completion_timeout(&qpair, &g_status, timeout_in_usecs); CU_ASSERT(g_status.timed_out == true); CU_ASSERT(g_status.done == false); CU_ASSERT(rc == -ECANCELED); @@ -1266,9 +1266,9 @@ test_nvme_wait_for_completion(void) /* spdk_nvme_qpair_process_completions returns error */ memset(&g_status, 0, sizeof(g_status)); g_process_comp_result = -1; - completion_delay = 1; - timeout_in_secs = 2; - rc = nvme_wait_for_completion_timeout(&qpair, &g_status, timeout_in_secs); + completion_delay_us = 1000000; + timeout_in_usecs = 2000000; + rc = nvme_wait_for_completion_timeout(&qpair, &g_status, timeout_in_usecs); CU_ASSERT(rc == -ECANCELED); CU_ASSERT(g_status.timed_out == true); CU_ASSERT(g_status.done == false); @@ -1279,9 +1279,9 @@ test_nvme_wait_for_completion(void) /* complete in time */ memset(&g_status, 0, sizeof(g_status)); - completion_delay = 1; - timeout_in_secs = 2; - rc = nvme_wait_for_completion_timeout(&qpair, &g_status, timeout_in_secs); + completion_delay_us = 1000000; + timeout_in_usecs = 2000000; + rc = nvme_wait_for_completion_timeout(&qpair, &g_status, timeout_in_usecs); CU_ASSERT(g_status.timed_out == false); CU_ASSERT(g_status.done == true); CU_ASSERT(rc == 0); 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 f5b374639..20bd5d440 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 @@ -318,7 +318,7 @@ nvme_wait_for_completion(struct spdk_nvme_qpair *qpair, int nvme_wait_for_completion_timeout(struct spdk_nvme_qpair *qpair, struct nvme_completion_poll_status *status, - uint64_t timeout_in_secs) + uint64_t timeout_in_usecs) { return nvme_wait_for_completion_robust_lock(qpair, status, NULL); }