Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 29 Aug 2015 11:21:21 +0000 (UTC)
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r287289 - in head/sys/cam: ata scsi
Message-ID:  <201508291121.t7TBLLu3060720@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: mav
Date: Sat Aug 29 11:21:20 2015
New Revision: 287289
URL: https://svnweb.freebsd.org/changeset/base/287289

Log:
  Attach pass driver to LUNs is OFFLINE state.
  
  Previously such LUNs were silently ignored.  But while they indeed unable
  to process most of SCSI commands, some, like RTPG, they still can.
  
  MFC after:	1 month

Modified:
  head/sys/cam/ata/ata_xpt.c
  head/sys/cam/scsi/scsi_cd.c
  head/sys/cam/scsi/scsi_ch.c
  head/sys/cam/scsi/scsi_da.c
  head/sys/cam/scsi/scsi_pt.c
  head/sys/cam/scsi/scsi_sa.c
  head/sys/cam/scsi/scsi_xpt.c

Modified: head/sys/cam/ata/ata_xpt.c
==============================================================================
--- head/sys/cam/ata/ata_xpt.c	Sat Aug 29 11:15:58 2015	(r287288)
+++ head/sys/cam/ata/ata_xpt.c	Sat Aug 29 11:21:20 2015	(r287289)
@@ -1090,7 +1090,8 @@ notsata:
 
 		periph_qual = SID_QUAL(inq_buf);
 
-		if (periph_qual != SID_QUAL_LU_CONNECTED)
+		if (periph_qual != SID_QUAL_LU_CONNECTED &&
+		    periph_qual != SID_QUAL_LU_OFFLINE)
 			break;
 
 		/*

Modified: head/sys/cam/scsi/scsi_cd.c
==============================================================================
--- head/sys/cam/scsi/scsi_cd.c	Sat Aug 29 11:15:58 2015	(r287288)
+++ head/sys/cam/scsi/scsi_cd.c	Sat Aug 29 11:21:20 2015	(r287289)
@@ -389,7 +389,8 @@ cdasync(void *callback_arg, u_int32_t co
 
 		if (cgd->protocol != PROTO_SCSI)
 			break;
-
+		if (SID_QUAL(&cgd->inq_data) != SID_QUAL_LU_CONNECTED)
+			break;
 		if (SID_TYPE(&cgd->inq_data) != T_CDROM
 		    && SID_TYPE(&cgd->inq_data) != T_WORM)
 			break;

Modified: head/sys/cam/scsi/scsi_ch.c
==============================================================================
--- head/sys/cam/scsi/scsi_ch.c	Sat Aug 29 11:15:58 2015	(r287288)
+++ head/sys/cam/scsi/scsi_ch.c	Sat Aug 29 11:21:20 2015	(r287289)
@@ -337,7 +337,8 @@ chasync(void *callback_arg, u_int32_t co
 
 		if (cgd->protocol != PROTO_SCSI)
 			break;
-
+		if (SID_QUAL(&cgd->inq_data) != SID_QUAL_LU_CONNECTED)
+			break;
 		if (SID_TYPE(&cgd->inq_data)!= T_CHANGER)
 			break;
 

Modified: head/sys/cam/scsi/scsi_da.c
==============================================================================
--- head/sys/cam/scsi/scsi_da.c	Sat Aug 29 11:15:58 2015	(r287288)
+++ head/sys/cam/scsi/scsi_da.c	Sat Aug 29 11:21:20 2015	(r287289)
@@ -1663,7 +1663,8 @@ daasync(void *callback_arg, u_int32_t co
 
 		if (cgd->protocol != PROTO_SCSI)
 			break;
-
+		if (SID_QUAL(&cgd->inq_data) != SID_QUAL_LU_CONNECTED)
+			break;
 		if (SID_TYPE(&cgd->inq_data) != T_DIRECT
 		    && SID_TYPE(&cgd->inq_data) != T_RBC
 		    && SID_TYPE(&cgd->inq_data) != T_OPTICAL)

Modified: head/sys/cam/scsi/scsi_pt.c
==============================================================================
--- head/sys/cam/scsi/scsi_pt.c	Sat Aug 29 11:15:58 2015	(r287288)
+++ head/sys/cam/scsi/scsi_pt.c	Sat Aug 29 11:21:20 2015	(r287289)
@@ -366,7 +366,8 @@ ptasync(void *callback_arg, u_int32_t co
 
 		if (cgd->protocol != PROTO_SCSI)
 			break;
-
+		if (SID_QUAL(&cgd->inq_data) != SID_QUAL_LU_CONNECTED)
+			break;
 		if (SID_TYPE(&cgd->inq_data) != T_PROCESSOR)
 			break;
 

Modified: head/sys/cam/scsi/scsi_sa.c
==============================================================================
--- head/sys/cam/scsi/scsi_sa.c	Sat Aug 29 11:15:58 2015	(r287288)
+++ head/sys/cam/scsi/scsi_sa.c	Sat Aug 29 11:21:20 2015	(r287289)
@@ -2255,7 +2255,8 @@ saasync(void *callback_arg, u_int32_t co
 
 		if (cgd->protocol != PROTO_SCSI)
 			break;
-
+		if (SID_QUAL(&cgd->inq_data) != SID_QUAL_LU_CONNECTED)
+			break;
 		if (SID_TYPE(&cgd->inq_data) != T_SEQUENTIAL)
 			break;
 

Modified: head/sys/cam/scsi/scsi_xpt.c
==============================================================================
--- head/sys/cam/scsi/scsi_xpt.c	Sat Aug 29 11:15:58 2015	(r287288)
+++ head/sys/cam/scsi/scsi_xpt.c	Sat Aug 29 11:21:20 2015	(r287289)
@@ -1123,6 +1123,7 @@ probedone(struct cam_periph *periph, uni
 {
 	probe_softc *softc;
 	struct cam_path *path;
+	struct scsi_inquiry_data *inq_buf;
 	u_int32_t  priority;
 
 	CAM_DEBUG(done_ccb->ccb_h.path, CAM_DEBUG_TRACE, ("probedone\n"));
@@ -1162,7 +1163,6 @@ out:
 	case PROBE_FULL_INQUIRY:
 	{
 		if (cam_ccb_status(done_ccb) == CAM_REQ_CMP) {
-			struct scsi_inquiry_data *inq_buf;
 			u_int8_t periph_qual;
 
 			path->device->flags |= CAM_DEV_INQUIRY_DATA_VALID;
@@ -1171,7 +1171,8 @@ out:
 
 			periph_qual = SID_QUAL(inq_buf);
 
-			if (periph_qual == SID_QUAL_LU_CONNECTED) {
+			if (periph_qual == SID_QUAL_LU_CONNECTED ||
+			    periph_qual == SID_QUAL_LU_OFFLINE) {
 				u_int8_t len;
 
 				/*
@@ -1347,10 +1348,10 @@ out:
 			probe_purge_old(path, lp, softc->flags);
 			lp = NULL;
 		}
+		inq_buf = &path->device->inq_data;
 		if (path->device->flags & CAM_DEV_INQUIRY_DATA_VALID &&
-		    SID_QUAL(&path->device->inq_data) == SID_QUAL_LU_CONNECTED) {
-			struct scsi_inquiry_data *inq_buf;
-			inq_buf = &path->device->inq_data;
+		    (SID_QUAL(inq_buf) == SID_QUAL_LU_CONNECTED ||
+		    SID_QUAL(inq_buf) == SID_QUAL_LU_OFFLINE)) {
 			if (INQ_DATA_TQ_ENABLED(inq_buf))
 				PROBE_SET_ACTION(softc, PROBE_MODE_SENSE);
 			else



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