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: Shuhei 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: <tanl12@chinatelecom.cn> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
8cd418883d
commit
e63eebca1b
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user