Commit e63eebca authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Tomasz Zawadzki
Browse files

bdev/nvme: Retry creating qpair if it fails when creating bdev channel



We may fail creating qpair when adding io_path while creating a bdev_channel
if connection is down. But if we enable I/O error recovery, we can retry
creating qpair later.

So let nvme_qpair_create() succeed if the ctrlr is being reset or
I/O error recovery is enabled even if creating qpair failed.

Signed-off-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Change-Id: I7d4ff036187bb79ada258cfc299582b4d287018b
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12288


Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatar <tanl12@chinatelecom.cn>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 8cd41888
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -2203,10 +2203,12 @@ nvme_qpair_create(struct nvme_ctrlr *nvme_ctrlr, struct nvme_ctrlr_channel *ctrl

	rc = bdev_nvme_create_qpair(nvme_qpair);
	if (rc != 0) {
		/* nvme ctrlr can't create IO qpair during reset. In that case ctrlr_ch->qpair
		 * pointer will be NULL and IO qpair will be created when reset completes.
		 * If the user submits IO requests during reset, they will be queued and resubmitted later */
		if (!nvme_ctrlr->resetting) {
		/* nvme_ctrlr can't create IO qpair if connection is down. If nvme_ctrlr is
		 * being reset or scheduled to reconnect later, ignore this failure.
		 * Then IO qpair will be created later when reconnect completes.
		 * If the user submits IO requests in the meantime, they will be queued and
		 * resubmitted later */
		if (!nvme_ctrlr->resetting && !nvme_ctrlr->reconnect_is_delayed) {
			spdk_put_io_channel(pg_ch);
			free(nvme_qpair);
			return rc;