From 8cd418883d2007d98c9b29c43d5df95ca3d82a1a Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 19 Apr 2022 10:27:45 +0900 Subject: [PATCH] bdev/nvme: Call failover() instead of reset() if I/O qpair gets error first Previously, only if admin qpair gets error, bdev_nvme_failover() was called. However, I/O qpair may get error earlier than admin qpair. In this case, bdev_nvme_failover() was called but reset was already in progress. So bdev_nvme_failover() returned without doing anything. bdev_nvme_reset_complete() executes bdev_nvme_failover() if reset failed. However the test time of test/nvmf/host/failover.sh was very short. Timeout came before trying bdev_nvme_failover(). We can replace other bdev_nvme_reset() calls by bdev_nvme_failover() but this patch focuses on the critical case. Fixes issue #2128. Signed-off-by: Shuhei Matsumoto Change-Id: I68f54bbf54f92343aa56ae41f2b4cd92421c4bbb Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12295 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Aleksey Marchuk --- module/bdev/nvme/bdev_nvme.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/bdev/nvme/bdev_nvme.c b/module/bdev/nvme/bdev_nvme.c index 9e555a06d..dc711d1ba 100644 --- a/module/bdev/nvme/bdev_nvme.c +++ b/module/bdev/nvme/bdev_nvme.c @@ -1173,7 +1173,7 @@ bdev_nvme_disconnected_qpair_cb(struct spdk_nvme_qpair *qpair, void *poll_group_ } else { /* qpair was disconnected unexpectedly. Reset controller for recovery. */ SPDK_NOTICELOG("qpair %p was disconnected and freed. reset controller.\n", qpair); - bdev_nvme_reset(nvme_qpair->ctrlr); + bdev_nvme_failover(nvme_qpair->ctrlr, false); } } else { /* In this case, ctrlr_channel is already deleted. */