Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 Jun 2023 20:47:06 GMT
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 97e24c386868 - main - camcontrol: Simplfiy 12-byte retry logic in defects command
Message-ID:  <202306192047.35JKl66p095717@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by imp:

URL: https://cgit.FreeBSD.org/src/commit/?id=97e24c3868682bcad5d37a5f1679a87b82acd255

commit 97e24c3868682bcad5d37a5f1679a87b82acd255
Author:     Warner Losh <imp@FreeBSD.org>
AuthorDate: 2023-06-19 20:43:05 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2023-06-19 20:45:43 +0000

    camcontrol: Simplfiy 12-byte retry logic in defects command
    
    We always start out using the 10-byte version of READ DEFECT DATA, and
    then switch to 12-byte when necessary due to errors or data length
    requirements. We always need to get the length again when we do this,
    and we're always going to be using 12-byte commands from that point
    forward. Simplify the logic a bit based on this observation.
    
    Sponsored by:           Netflix
    Reviewed by:            mav
    Differential Revision:  https://reviews.freebsd.org/D40522
---
 sbin/camcontrol/camcontrol.c | 31 +++++++++++++------------------
 1 file changed, 13 insertions(+), 18 deletions(-)

diff --git a/sbin/camcontrol/camcontrol.c b/sbin/camcontrol/camcontrol.c
index 0a1245e9cc48..c059d64652c5 100644
--- a/sbin/camcontrol/camcontrol.c
+++ b/sbin/camcontrol/camcontrol.c
@@ -3923,18 +3923,23 @@ readdefects(struct cam_device *device, int argc, char **argv,
 
 	ccb = cam_getccb(device);
 
-retry_12byte:
-
 	/*
-	 * We start off asking for just the header to determine how much
-	 * defect data is available.  Some Hitachi drives return an error
-	 * if you ask for more data than the drive has.  Once we know the
-	 * length, we retry the command with the returned length.
+	 * We start off asking for just the header to determine how much defect
+	 * data is available.  Some Hitachi drives return an error if you ask
+	 * for more data than the drive has.  Once we know the length, we retry
+	 * the command with the returned length.  When we're retrying the with
+	 * 12-byte command, we're always changing to the 12-byte command and
+	 * need to get the length. Simplify the logic below by always setting
+	 * use_12byte in this case with this slightly more complex logic here.
 	 */
-	if (!use_12byte)
+	if (!use_12byte) {
 		dlist_length = sizeof(*hdr10);
-	else
+	} else  {
+retry_12byte:
+		get_length = true;
+		use_12byte = true;
 		dlist_length = sizeof(*hdr12);
+	}
 
 retry:
 	if (defect_list != NULL) {
@@ -4058,8 +4063,6 @@ next_batch:
 			 && (returned_length > 0)) {
 				if (!use_12byte
 				 && (returned_length >= max_possible_size)) {
-					get_length = true;
-					use_12byte = true;
 					goto retry_12byte;
 				}
 				dlist_length = returned_length + hdr_size;
@@ -4075,8 +4078,6 @@ next_batch:
 				 * byte command.
 				 */
 				if (!use_12byte) {
-					get_length = true;
-					use_12byte = true;
 					goto retry_12byte;
 				}
 				dlist_length = returned_length + hdr_size;
@@ -4091,8 +4092,6 @@ next_batch:
 				 * byte command.
 				 */
 				if (!use_12byte) {
-					get_length = true;
-					use_12byte = true;
 					goto retry_12byte;
 				}
 				dlist_length = returned_length + hdr_size;
@@ -4108,8 +4107,6 @@ next_batch:
 					if (!use_12byte
 					 && (returned_length >=
 					     max_possible_size)) {
-						get_length = true;
-						use_12byte = true;
 						goto retry_12byte;
 					}
 					dlist_length = returned_length +
@@ -4127,8 +4124,6 @@ next_batch:
 		} else {
 			if (!use_12byte
 			 && (returned_length >= max_possible_size)) {
-				get_length = true;
-				use_12byte = true;
 				goto retry_12byte;
 			}
 			dlist_length = returned_length + hdr_size;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202306192047.35JKl66p095717>