svn commit: r355092 - stable/11/sys/dev/nvme

Alexander Motin mav at FreeBSD.org
Mon Nov 25 15:51:07 UTC 2019


Author: mav
Date: Mon Nov 25 15:51:05 2019
New Revision: 355092
URL: https://svnweb.freebsd.org/changeset/base/355092

Log:
  MFC r344955 (by imp):
  Don't print all the I/O we abort on a reset, unless we're out of
  retries.
  
  When resetting the controller, we abort I/O. Prior to this fix, we
  printed a ton of abort messages for I/O that we're going to
  retry. This imparts no useful information. Stop printing them unless
  our retry count is exhausted. Clarify code for when we don't retry,
  and remove useless arg to a routine that's always called with it
  as 'true'. All the other debug is still printed (including multiple
  reset messages if we have multiple timeouts before the taskqueue
  runs the actual reset) so that we know when we reset.

Modified:
  stable/11/sys/dev/nvme/nvme_ctrlr.c
  stable/11/sys/dev/nvme/nvme_private.h
  stable/11/sys/dev/nvme/nvme_qpair.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/nvme/nvme_ctrlr.c
==============================================================================
--- stable/11/sys/dev/nvme/nvme_ctrlr.c	Mon Nov 25 15:45:19 2019	(r355091)
+++ stable/11/sys/dev/nvme/nvme_ctrlr.c	Mon Nov 25 15:51:05 2019	(r355092)
@@ -235,7 +235,7 @@ nvme_ctrlr_fail_req_task(void *arg, int pending)
 		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);

Modified: stable/11/sys/dev/nvme/nvme_private.h
==============================================================================
--- stable/11/sys/dev/nvme/nvme_private.h	Mon Nov 25 15:45:19 2019	(r355091)
+++ stable/11/sys/dev/nvme/nvme_private.h	Mon Nov 25 15:51:05 2019	(r355092)
@@ -415,8 +415,7 @@ void	nvme_qpair_reset(struct nvme_qpair *qpair);
 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);

Modified: stable/11/sys/dev/nvme/nvme_qpair.c
==============================================================================
--- stable/11/sys/dev/nvme/nvme_qpair.c	Mon Nov 25 15:45:19 2019	(r355091)
+++ stable/11/sys/dev/nvme/nvme_qpair.c	Mon Nov 25 15:51:05 2019	(r355092)
@@ -34,6 +34,9 @@ __FBSDID("$FreeBSD$");
 
 #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);
@@ -358,7 +361,7 @@ nvme_completion_is_retry(const struct nvme_completion 
 
 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;
@@ -368,7 +371,8 @@ nvme_qpair_complete_tracker(struct nvme_qpair *qpair, 
 	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);
 	}
@@ -420,7 +424,7 @@ nvme_qpair_complete_tracker(struct nvme_qpair *qpair, 
 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;
 
@@ -435,8 +439,7 @@ nvme_qpair_manual_complete_tracker(struct nvme_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)
+    struct nvme_request *req, uint32_t sct, uint32_t sc)
 {
 	struct nvme_completion	cpl;
 	boolean_t		error;
@@ -448,7 +451,7 @@ nvme_qpair_manual_complete_request(struct nvme_qpair *
 
 	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);
 	}
@@ -488,7 +491,7 @@ nvme_qpair_process_completions(struct nvme_qpair *qpai
 		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 {
@@ -713,7 +716,7 @@ nvme_admin_qpair_abort_aers(struct nvme_qpair *qpair)
 		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);
@@ -756,7 +759,7 @@ nvme_abort_complete(void *arg, const struct nvme_compl
 		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);
 	}
 }
 
@@ -973,7 +976,7 @@ _nvme_qpair_submit_request(struct nvme_qpair *qpair, s
 		 */
 		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);
 	}
 }
@@ -1031,7 +1034,7 @@ nvme_admin_qpair_enable(struct nvme_qpair *qpair)
 		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);
@@ -1053,7 +1056,7 @@ nvme_io_qpair_enable(struct nvme_qpair *qpair)
 	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);
@@ -1118,7 +1121,7 @@ nvme_qpair_fail(struct nvme_qpair *qpair)
 		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);
 	}
 
@@ -1132,7 +1135,7 @@ nvme_qpair_fail(struct nvme_qpair *qpair)
 		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);
 	}
 


More information about the svn-src-all mailing list