Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 22 Jan 2011 21:54:27 -0800
From:      Matthew Jacob <mj@feral.com>
To:        pz-freebsd-scsi@ziemba.us
Cc:        freebsd-scsi@freebsd.org
Subject:   Re: rescan causes offlined tape to reload
Message-ID:  <4D3BC293.4010808@feral.com>
In-Reply-To: <ihad7a$26l1$1@hairball.ziemba.us>
References:  <ihad7a$26l1$1@hairball.ziemba.us>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------070101080802070005040808
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

On 1/20/2011 2:33 PM, G. Paul Ziemba wrote:

The basic gist of the error is that during the probe sequence a command 
is likely coming back with ASC 0x04 ASCQ 0x02 (Logical unit not ready, 
initializing command required).

Unfortunately, this causes camperiphscsisenseerror to issue 
scsi_start_stop command. Why this did not occur before I am a little 
baffled about because the same code was in place in the time frame you 
had it 'working'.

See if the attached patch helps

--------------070101080802070005040808
Content-Type: text/plain;
 name="no_auto_start.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="no_auto_start.patch"

Index: sys/cam/cam_periph.c
===================================================================
--- sys/cam/cam_periph.c	(revision 217716)
+++ sys/cam/cam_periph.c	(working copy)
@@ -1525,36 +1525,43 @@
 			*action_string = "Unretryable error";
 			break;
 		case SS_START:
-		{
-			int le;
+			if (SID_TYPE(&cgd.inq_data) != T_SEQUENTIAL) {
+				int le;
 
-			/*
-			 * Send a start unit command to the device, and
-			 * then retry the command.
-			 */
-			*action_string = "Attempting to start unit";
-			periph->flags |= CAM_PERIPH_RECOVERY_INPROG;
+				/*
+				 * Send a start unit command to the device, and
+				 * then retry the command.
+				 */
+				*action_string = "Attempting to start unit";
+				periph->flags |= CAM_PERIPH_RECOVERY_INPROG;
 
-			/*
-			 * Check for removable media and set
-			 * load/eject flag appropriately.
-			 */
-			if (SID_IS_REMOVABLE(&cgd.inq_data))
-				le = TRUE;
-			else
-				le = FALSE;
+				/*
+				 * Check for removable media and set
+				 * load/eject flag appropriately.
+				 */
+				if (SID_IS_REMOVABLE(&cgd.inq_data))
+					le = TRUE;
+				else
+					le = FALSE;
 
-			scsi_start_stop(&ccb->csio,
-					/*retries*/1,
-					camperiphdone,
-					MSG_SIMPLE_Q_TAG,
-					/*start*/TRUE,
-					/*load/eject*/le,
-					/*immediate*/FALSE,
-					SSD_FULL_SIZE,
-					/*timeout*/50000);
+				scsi_start_stop(&ccb->csio,
+						/*retries*/1,
+						camperiphdone,
+						MSG_SIMPLE_Q_TAG,
+						/*start*/TRUE,
+						/*load/eject*/le,
+						/*immediate*/FALSE,
+						SSD_FULL_SIZE,
+						/*timeout*/50000);
+			} else {
+				xpt_free_ccb(orig_ccb);
+				ccb->ccb_h.status |= CAM_DEV_QFRZN;
+				*action_string = "Will not autostart a "
+				    "sequential access device";
+				err_action = SS_FAIL;
+				error = EIO;
+			}
 			break;
-		}
 		case SS_TUR:
 		{
 			/*

--------------070101080802070005040808--



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