nvme/pcie: make sure qpair connection is finished in delete
When deleting an IO qpair, make sure that it's connection process is finished (i.e. create CQ/SQ commands are completed) before freeing it. Signed-off-by: Konrad Sztyber <konrad.sztyber@intel.com> Change-Id: I487dcef390d73ff4a7264ff97d965c9030916840 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9279 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: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
9a3939bfb7
commit
662c0200be
@ -1047,6 +1047,16 @@ nvme_pcie_ctrlr_delete_io_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_
|
||||
goto free;
|
||||
}
|
||||
|
||||
/* If attempting to delete a qpair that's still being connected, we have to wait until it's
|
||||
* finished, so that we don't free it while it's waiting for the create cq/sq callbacks.
|
||||
*/
|
||||
while (nvme_qpair_get_state(qpair) == NVME_QPAIR_CONNECTING) {
|
||||
rc = spdk_nvme_qpair_process_completions(ctrlr->adminq, 0);
|
||||
if (rc < 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
status = calloc(1, sizeof(*status));
|
||||
if (!status) {
|
||||
SPDK_ERRLOG("Failed to allocate status tracker\n");
|
||||
|
Loading…
Reference in New Issue
Block a user