git: 0bc6c9279e51 - main - da: Stop the probing when periph invalidated in dadone_proberc

From: Warner Losh <imp_at_FreeBSD.org>
Date: Fri, 11 Sep 2026 05:32:36 UTC
The branch main has been updated by imp:

URL: https://cgit.FreeBSD.org/src/commit/?id=0bc6c9279e51ee6dddb7fe307121cd9a54176e81

commit 0bc6c9279e51ee6dddb7fe307121cd9a54176e81
Author:     Warner Losh <imp@FreeBSD.org>
AuthorDate: 2026-09-11 05:12:29 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2026-09-11 05:12:29 +0000

    da: Stop the probing when periph invalidated in dadone_proberc
    
    When READ CAPACITY fails, we call cam_periph_invalidate() for some
    hopeless ASC/ASCQ combinations and then fall through to test the cache
    state. This results in excess commands to the abandoned device that may
    take a while to timeout and/or report confusing errors. Instead, call
    daprobedone() when the periph is invalid to terminate the probe.
    
    Fixes: d78d04b17cb24
    Sponsored by:           Netflix
    MFC After: 1 week
    Differential Revision:  https://reviews.freebsd.org/D58524
---
 sys/cam/scsi/scsi_da.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/sys/cam/scsi/scsi_da.c b/sys/cam/scsi/scsi_da.c
index 7b47beeeccdd..ab88467f0834 100644
--- a/sys/cam/scsi/scsi_da.c
+++ b/sys/cam/scsi/scsi_da.c
@@ -5140,6 +5140,12 @@ dadone_proberc(struct cam_periph *periph, union ccb *done_ccb)
 		}
 	}
 	free(csio->data_ptr, M_SCSIDA);
+
+	if ((periph->flags & CAM_PERIPH_INVALID) != 0) {
+		daprobedone(periph, done_ccb);
+		return;
+	}
+
 	if (announce_buf != NULL &&
 	    ((softc->flags & DA_FLAG_ANNOUNCED) == 0)) {
 		struct sbuf sb;