diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index a1acc53fd..9f268c96b 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -1585,7 +1585,7 @@ error: return rc; } -static void +void nvme_ctrlr_abort_queued_aborts(struct spdk_nvme_ctrlr *ctrlr) { struct nvme_request *req, *tmp; diff --git a/lib/nvme/nvme_internal.h b/lib/nvme/nvme_internal.h index 53b5e5e07..fe4657b89 100644 --- a/lib/nvme/nvme_internal.h +++ b/lib/nvme/nvme_internal.h @@ -1176,6 +1176,7 @@ void nvme_ctrlr_process_async_event(struct spdk_nvme_ctrlr *ctrlr, const struct spdk_nvme_cpl *cpl); void nvme_ctrlr_disconnect_qpair(struct spdk_nvme_qpair *qpair); void nvme_ctrlr_complete_queued_async_events(struct spdk_nvme_ctrlr *ctrlr); +void nvme_ctrlr_abort_queued_aborts(struct spdk_nvme_ctrlr *ctrlr); int nvme_qpair_init(struct spdk_nvme_qpair *qpair, uint16_t id, struct spdk_nvme_ctrlr *ctrlr, enum spdk_nvme_qprio qprio, diff --git a/lib/nvme/nvme_qpair.c b/lib/nvme/nvme_qpair.c index 0a351691c..4d39a11e6 100644 --- a/lib/nvme/nvme_qpair.c +++ b/lib/nvme/nvme_qpair.c @@ -1055,6 +1055,9 @@ nvme_qpair_abort_all_queued_reqs(struct spdk_nvme_qpair *qpair, uint32_t dnr) nvme_qpair_complete_error_reqs(qpair); nvme_qpair_abort_queued_reqs(qpair, dnr); _nvme_qpair_complete_abort_queued_reqs(qpair); + if (nvme_qpair_is_admin_queue(qpair)) { + nvme_ctrlr_abort_queued_aborts(qpair->ctrlr); + } } int diff --git a/test/unit/lib/nvme/nvme_qpair.c/nvme_qpair_ut.c b/test/unit/lib/nvme/nvme_qpair.c/nvme_qpair_ut.c index 3b0e409ce..6307af237 100644 --- a/test/unit/lib/nvme/nvme_qpair.c/nvme_qpair_ut.c +++ b/test/unit/lib/nvme/nvme_qpair.c/nvme_qpair_ut.c @@ -32,6 +32,7 @@ DEFINE_STUB_V(nvme_transport_ctrlr_disconnect_qpair, (struct spdk_nvme_ctrlr *ct DEFINE_STUB_V(nvme_ctrlr_disconnect_qpair, (struct spdk_nvme_qpair *qpair)); DEFINE_STUB_V(nvme_ctrlr_complete_queued_async_events, (struct spdk_nvme_ctrlr *ctrlr)); +DEFINE_STUB_V(nvme_ctrlr_abort_queued_aborts, (struct spdk_nvme_ctrlr *ctrlr)); void nvme_ctrlr_fail(struct spdk_nvme_ctrlr *ctrlr, bool hot_remove)