Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F131865470
D19431.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D19431.id.diff
View Options
Index: head/sys/dev/nvme/nvme_ctrlr.c
===================================================================
--- head/sys/dev/nvme/nvme_ctrlr.c
+++ head/sys/dev/nvme/nvme_ctrlr.c
@@ -237,7 +237,7 @@
STAILQ_REMOVE_HEAD(&ctrlr->fail_req, stailq);
mtx_unlock(&ctrlr->lock);
nvme_qpair_manual_complete_request(req->qpair, req,
- NVME_SCT_GENERIC, NVME_SC_ABORTED_BY_REQUEST, TRUE);
+ NVME_SCT_GENERIC, NVME_SC_ABORTED_BY_REQUEST);
mtx_lock(&ctrlr->lock);
}
mtx_unlock(&ctrlr->lock);
Index: head/sys/dev/nvme/nvme_private.h
===================================================================
--- head/sys/dev/nvme/nvme_private.h
+++ head/sys/dev/nvme/nvme_private.h
@@ -417,8 +417,7 @@
void nvme_qpair_fail(struct nvme_qpair *qpair);
void nvme_qpair_manual_complete_request(struct nvme_qpair *qpair,
struct nvme_request *req,
- uint32_t sct, uint32_t sc,
- boolean_t print_on_error);
+ uint32_t sct, uint32_t sc);
void nvme_admin_qpair_enable(struct nvme_qpair *qpair);
void nvme_admin_qpair_disable(struct nvme_qpair *qpair);
Index: head/sys/dev/nvme/nvme_qpair.c
===================================================================
--- head/sys/dev/nvme/nvme_qpair.c
+++ head/sys/dev/nvme/nvme_qpair.c
@@ -36,6 +36,9 @@
#include "nvme_private.h"
+typedef enum error_print { ERROR_PRINT_NONE, ERROR_PRINT_NO_RETRY, ERROR_PRINT_ALL } error_print_t;
+#define DO_NOT_RETRY 1
+
static void _nvme_qpair_submit_request(struct nvme_qpair *qpair,
struct nvme_request *req);
static void nvme_qpair_destroy(struct nvme_qpair *qpair);
@@ -325,7 +328,7 @@
sct = NVME_STATUS_GET_SCT(cpl->status);
sc = NVME_STATUS_GET_SC(cpl->status);
- dnr = NVME_STATUS_GET_DNR(cpl->status);
+ dnr = NVME_STATUS_GET_DNR(cpl->status); /* Do Not Retry Bit */
/*
* TODO: spec is not clear how commands that are aborted due
@@ -369,7 +372,7 @@
static void
nvme_qpair_complete_tracker(struct nvme_qpair *qpair, struct nvme_tracker *tr,
- struct nvme_completion *cpl, boolean_t print_on_error)
+ struct nvme_completion *cpl, error_print_t print_on_error)
{
struct nvme_request *req;
boolean_t retry, error;
@@ -379,7 +382,8 @@
retry = error && nvme_completion_is_retry(cpl) &&
req->retries < nvme_retry_count;
- if (error && print_on_error) {
+ if (error && (print_on_error == ERROR_PRINT_ALL ||
+ (!retry && print_on_error == ERROR_PRINT_NO_RETRY))) {
nvme_qpair_print_command(qpair, &req->cmd);
nvme_qpair_print_completion(qpair, cpl);
}
@@ -431,7 +435,7 @@
static void
nvme_qpair_manual_complete_tracker(struct nvme_qpair *qpair,
struct nvme_tracker *tr, uint32_t sct, uint32_t sc, uint32_t dnr,
- boolean_t print_on_error)
+ error_print_t print_on_error)
{
struct nvme_completion cpl;
@@ -446,8 +450,7 @@
void
nvme_qpair_manual_complete_request(struct nvme_qpair *qpair,
- struct nvme_request *req, uint32_t sct, uint32_t sc,
- boolean_t print_on_error)
+ struct nvme_request *req, uint32_t sct, uint32_t sc)
{
struct nvme_completion cpl;
boolean_t error;
@@ -459,7 +462,7 @@
error = nvme_completion_is_error(&cpl);
- if (error && print_on_error) {
+ if (error) {
nvme_qpair_print_command(qpair, &req->cmd);
nvme_qpair_print_completion(qpair, &cpl);
}
@@ -502,7 +505,7 @@
tr = qpair->act_tr[cpl.cid];
if (tr != NULL) {
- nvme_qpair_complete_tracker(qpair, tr, &cpl, TRUE);
+ nvme_qpair_complete_tracker(qpair, tr, &cpl, ERROR_PRINT_ALL);
qpair->sq_head = cpl.sqhd;
done++;
} else {
@@ -728,7 +731,7 @@
if (tr->req->cmd.opc == NVME_OPC_ASYNC_EVENT_REQUEST) {
nvme_qpair_manual_complete_tracker(qpair, tr,
NVME_SCT_GENERIC, NVME_SC_ABORTED_SQ_DELETION, 0,
- FALSE);
+ ERROR_PRINT_NONE);
tr = TAILQ_FIRST(&qpair->outstanding_tr);
} else {
tr = TAILQ_NEXT(tr, tailq);
@@ -771,7 +774,7 @@
nvme_printf(tr->qpair->ctrlr,
"abort command failed, aborting command manually\n");
nvme_qpair_manual_complete_tracker(tr->qpair, tr,
- NVME_SCT_GENERIC, NVME_SC_ABORTED_BY_REQUEST, 0, TRUE);
+ NVME_SCT_GENERIC, NVME_SC_ABORTED_BY_REQUEST, 0, ERROR_PRINT_ALL);
}
}
@@ -989,7 +992,7 @@
*/
mtx_unlock(&qpair->lock);
nvme_qpair_manual_complete_tracker(qpair, tr, NVME_SCT_GENERIC,
- NVME_SC_DATA_TRANSFER_ERROR, 1 /* do not retry */, TRUE);
+ NVME_SC_DATA_TRANSFER_ERROR, DO_NOT_RETRY, ERROR_PRINT_ALL);
mtx_lock(&qpair->lock);
}
}
@@ -1047,7 +1050,7 @@
nvme_printf(qpair->ctrlr,
"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_SC_ABORTED_BY_REQUEST, DO_NOT_RETRY, ERROR_PRINT_ALL);
}
nvme_qpair_enable(qpair);
@@ -1069,7 +1072,7 @@
TAILQ_FOREACH_SAFE(tr, &qpair->outstanding_tr, tailq, tr_temp) {
nvme_printf(qpair->ctrlr, "aborting outstanding i/o\n");
nvme_qpair_manual_complete_tracker(qpair, tr, NVME_SCT_GENERIC,
- NVME_SC_ABORTED_BY_REQUEST, 0, TRUE);
+ NVME_SC_ABORTED_BY_REQUEST, 0, ERROR_PRINT_NO_RETRY);
}
mtx_lock(&qpair->lock);
@@ -1134,7 +1137,7 @@
nvme_printf(qpair->ctrlr, "failing queued i/o\n");
mtx_unlock(&qpair->lock);
nvme_qpair_manual_complete_request(qpair, req, NVME_SCT_GENERIC,
- NVME_SC_ABORTED_BY_REQUEST, TRUE);
+ NVME_SC_ABORTED_BY_REQUEST);
mtx_lock(&qpair->lock);
}
@@ -1148,7 +1151,7 @@
nvme_printf(qpair->ctrlr, "failing outstanding i/o\n");
mtx_unlock(&qpair->lock);
nvme_qpair_manual_complete_tracker(qpair, tr, NVME_SCT_GENERIC,
- NVME_SC_ABORTED_BY_REQUEST, 1 /* do not retry */, TRUE);
+ NVME_SC_ABORTED_BY_REQUEST, DO_NOT_RETRY, ERROR_PRINT_ALL);
mtx_lock(&qpair->lock);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Oct 12, 7:39 PM (5 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
23603865
Default Alt Text
D19431.id.diff (5 KB)
Attached To
Mode
D19431: Don't print all the I/O we abort on a reset, unless we're out of retries.
Attached
Detach File
Event Timeline
Log In to Comment