git: 97e24c386868 - main - camcontrol: Simplfiy 12-byte retry logic in defects command
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 19 Jun 2023 20:47:06 UTC
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;