NVME: Fixes stuck IOs during hot remove (#1451)
When a NVMe device is hot removed, subsequent calls to nvme_qpair_submit_request can fail with ENXIO. The failure path handling for ENXIO did not free the request which exhausts the qpair's free_req list eventually and all IOs are stuck going forward. This fix adds the same cleanup handling to nvme_qpair_submit_request for this error case as it is done in _nvme_qpair_submit_request. Signed-off-by: Michael Haeuptle <michael.haeuptle@hpe.com> Change-Id: I5677d53965bdbd6d339c013483cdf42ce782099a Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3018 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
parent
ceb07eb8f4
commit
89013903fe
@ -749,6 +749,10 @@ nvme_qpair_submit_request(struct spdk_nvme_qpair *qpair, struct nvme_request *re
|
||||
/* This prevents us from entering an infinite loop when freeing queued I/O in disconnect. */
|
||||
if (spdk_unlikely(nvme_qpair_get_state(qpair) == NVME_QPAIR_DISCONNECTING ||
|
||||
nvme_qpair_get_state(qpair) == NVME_QPAIR_DESTROYING)) {
|
||||
if (req->parent != NULL) {
|
||||
nvme_request_remove_child(req->parent, req);
|
||||
}
|
||||
nvme_free_request(req);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user