changeset 12971:52a0d8a59353

6952406 enumeration errors and disk failures during boot
author Srikanth Suravajhala <srikanth.suravajhala@oracle.com>
date Thu, 29 Jul 2010 12:16:10 -0700
parents 7d727ba2f201
children daef03a98f12
files usr/src/uts/common/io/scsi/conf/scsi_confsubr.c
diffstat 1 files changed, 10 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/io/scsi/conf/scsi_confsubr.c	Thu Jul 29 11:58:13 2010 -0700
+++ b/usr/src/uts/common/io/scsi/conf/scsi_confsubr.c	Thu Jul 29 12:16:10 2010 -0700
@@ -1023,7 +1023,7 @@
 int
 scsi_probe(struct scsi_device *sd, int (*callback)())
 {
-	int			ret;
+	int			ret, retry = 0;
 	scsi_hba_tran_t		*tran = sd->sd_address.a_hba_tran;
 
 	if (scsi_check_ss2_LUN_limit(sd) != 0) {
@@ -1033,13 +1033,21 @@
 		 */
 		return (SCSIPROBE_NORESP);	/* skip probing this one */
 	}
-
+again:
 	if (tran->tran_tgt_probe != NULL) {
 		ret = (*tran->tran_tgt_probe)(sd, callback);
 	} else {
 		ret = scsi_hba_probe(sd, callback);
 	}
 
+	if ((ret != SCSIPROBE_EXISTS) && (retry == 0)) {
+		if (scsi_reset(&sd->sd_address, RESET_LUN) != 1) {
+			cmn_err(CE_WARN, "scsi_probe: scsi_reset failed");
+		}
+		retry = 1;
+		goto again;
+	}
+
 	if (ret == SCSIPROBE_EXISTS) {
 		create_inquiry_props(sd);
 		/* is this a strictly-SCSI-2 node ?? */