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 <smatsumoto@nvidia.com> Change-Id: I68f54bbf54f92343aa56ae41f2b4cd92421c4bbb Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12295 Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
parent
c20e41cd38
commit
8cd418883d
@ -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. */
|
||||
|
Loading…
Reference in New Issue
Block a user