diff options
author | jimharris <jimharris@FreeBSD.org> | 2013-03-26 22:06:05 +0000 |
---|---|---|
committer | jimharris <jimharris@FreeBSD.org> | 2013-03-26 22:06:05 +0000 |
commit | ff567ee3e1dfdf36fd8473b02ec9e68996b6c960 (patch) | |
tree | f17a8939153caa4225dc30bc748244cef677b925 /sys/dev/nvme/nvme_qpair.c | |
parent | 69d2e138016916537645300c0cd8509dc6ced0eb (diff) | |
download | FreeBSD-src-ff567ee3e1dfdf36fd8473b02ec9e68996b6c960.zip FreeBSD-src-ff567ee3e1dfdf36fd8473b02ec9e68996b6c960.tar.gz |
Abort and do not retry any outstanding admin commands left over after
a controller reset.
Sponsored by: Intel
Reviewed by: carl
Diffstat (limited to 'sys/dev/nvme/nvme_qpair.c')
-rw-r--r-- | sys/dev/nvme/nvme_qpair.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/sys/dev/nvme/nvme_qpair.c b/sys/dev/nvme/nvme_qpair.c index 8ac61b1..7b12774 100644 --- a/sys/dev/nvme/nvme_qpair.c +++ b/sys/dev/nvme/nvme_qpair.c @@ -594,6 +594,21 @@ nvme_qpair_reset(struct nvme_qpair *qpair) void nvme_admin_qpair_enable(struct nvme_qpair *qpair) { + struct nvme_tracker *tr; + struct nvme_tracker *tr_temp; + + /* + * Manually abort each outstanding admin command. Do not retry + * admin commands found here, since they will be left over from + * a controller reset and its likely the context in which the + * command was issued no longer applies. + */ + TAILQ_FOREACH_SAFE(tr, &qpair->outstanding_tr, tailq, tr_temp) { + device_printf(qpair->ctrlr->dev, + "aborting outstanding admin command\n"); + nvme_qpair_manual_complete_tracker(qpair, tr, NVME_SCT_GENERIC, + NVME_SC_ABORTED_BY_REQUEST, 1 /* do not retry */, TRUE); + } nvme_qpair_enable(qpair); } |