diff options
author | Warner Losh <imp@FreeBSD.org> | 2021-09-17 20:56:58 +0000 |
---|---|---|
committer | Alexander Motin <mav@FreeBSD.org> | 2022-01-21 02:07:30 +0000 |
commit | 24d2d1813e82224cf30820206d165260a301811d (patch) | |
tree | c5a7b04b1724944104b55994d7fea5f543f946fa /sys/dev/nvme/nvme_qpair.c | |
parent | eb4d2eab0719744a9926f596dd4a20a3559af67c (diff) | |
download | src-24d2d1813e82224cf30820206d165260a301811d.tar.gz src-24d2d1813e82224cf30820206d165260a301811d.zip |
nvme/nda: Fail all nvme I/Os after controller fails
Once the controller has failed, fail all I/O w/o sending it to the
device. The reset of the nvme driver won't schedule any I/O to the
failed device, and the controller is in an indeterminate state and can't
accept I/O. Fail both at the top end of the sim and the bottom
end. Don't bother queueing up the I/O for failure in a different task.
Reviewed by: chuck
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D31341
(cherry picked from commit 4b977e6dda92fe093ea300f1a91dbcf877b64fa0)
Diffstat (limited to 'sys/dev/nvme/nvme_qpair.c')
-rw-r--r-- | sys/dev/nvme/nvme_qpair.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/sys/dev/nvme/nvme_qpair.c b/sys/dev/nvme/nvme_qpair.c index eea87e299d3d..71718acff66f 100644 --- a/sys/dev/nvme/nvme_qpair.c +++ b/sys/dev/nvme/nvme_qpair.c @@ -1078,12 +1078,10 @@ _nvme_qpair_submit_request(struct nvme_qpair *qpair, struct nvme_request *req) if (qpair->ctrlr->is_failed) { /* - * The controller has failed. Post the request to a - * task where it will be aborted, so that we do not - * invoke the request's callback in the context - * of the submission. + * The controller has failed, so fail the request. */ - nvme_ctrlr_post_failed_request(qpair->ctrlr, req); + nvme_qpair_manual_complete_request(qpair, req, + NVME_SCT_GENERIC, NVME_SC_ABORTED_BY_REQUEST); } else { /* * Put the request on the qpair's request queue to be |