From 9ff419a90e1eed2e58b0811bcc062bb1ecd91786 Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Fri, 25 Feb 2022 02:51:03 +0000 Subject: [PATCH] bdev/nvme: modify discovery_poller timer period Attempt to start a connection once per second, but after a connection is successfully started, change the timer period to one millisecond instead. This ensures lower response time to AER events when the discovery controller is operational, but then decreasing rate of unsuccessful connect attempts (and associated log messages) if/when a discovery controller fails. Signed-off-by: Jim Harris Change-Id: Ie24036303f5b00f4a42b6575656f401ea4d578f2 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11774 Tested-by: SPDK CI Jenkins Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Reviewed-by: Ben Walker Reviewed-by: Aleksey Marchuk Reviewed-by: Shuhei Matsumoto --- module/bdev/nvme/bdev_nvme.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index fb92239e9..b1ac6377b 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -4668,7 +4668,10 @@ discovery_poller(void *arg) TAILQ_REMOVE(&ctx->discovery_entry_ctxs, ctx->entry_ctx_in_use, tailq); trid = &ctx->entry_ctx_in_use->trid; ctx->probe_ctx = spdk_nvme_connect_async(trid, &ctx->drv_opts, discovery_attach_cb); - if (!ctx->probe_ctx) { + if (ctx->probe_ctx) { + spdk_poller_unregister(&ctx->poller); + ctx->poller = SPDK_POLLER_REGISTER(discovery_poller, ctx, 1000); + } else { DISCOVERY_ERRLOG(ctx, "could not start discovery connect\n"); TAILQ_INSERT_TAIL(&ctx->discovery_entry_ctxs, ctx->entry_ctx_in_use, tailq); ctx->entry_ctx_in_use = NULL; @@ -4685,6 +4688,8 @@ discovery_poller(void *arg) } else { rc = spdk_nvme_ctrlr_process_admin_completions(ctx->ctrlr); if (rc < 0) { + spdk_poller_unregister(&ctx->poller); + ctx->poller = SPDK_POLLER_REGISTER(discovery_poller, ctx, 1000 * 1000); TAILQ_INSERT_TAIL(&ctx->discovery_entry_ctxs, ctx->entry_ctx_in_use, tailq); ctx->entry_ctx_in_use = NULL; @@ -4705,7 +4710,7 @@ start_discovery_poller(void *arg) struct discovery_ctx *ctx = arg; TAILQ_INSERT_TAIL(&g_discovery_ctxs, ctx, tailq); - ctx->poller = SPDK_POLLER_REGISTER(discovery_poller, ctx, 1000); + ctx->poller = SPDK_POLLER_REGISTER(discovery_poller, ctx, 1000 * 1000); } int