svn commit: r244369 - head/sys/dev/arcmsr
Jim Harris
jimharris at FreeBSD.org
Tue Dec 18 00:00:08 UTC 2012
Author: jimharris
Date: Tue Dec 18 00:00:07 2012
New Revision: 244369
URL: http://svnweb.freebsd.org/changeset/base/244369
Log:
Use CAM_DEV_NOT_THERE instead of CAM_SEL_TIMEOUT to report nonexistent
LUNs for the virtual processor device. This removes lots of CAM warnings,
and follows similar recent changes to tws(4) and twa(4) drivers.
Also fix case where CAM_REQ_CMP was getting OR'd with CAM_DEV_NOT_THERE
in the nonexistent LUN case, resulting in different CAM status (CAM_UA_TERMIO)
getting reported to CAM. This issue existing previously, but was more subtle
because it changed CAM_SEL_TIMEOUT to CAM_CMD_TIMEOUT.
Sponsored by: Intel
Reported and tested by: Willem Jan Withagen <wjw at digiware.nl>
MFC after: 1 week
Modified:
head/sys/dev/arcmsr/arcmsr.c
Modified: head/sys/dev/arcmsr/arcmsr.c
==============================================================================
--- head/sys/dev/arcmsr/arcmsr.c Mon Dec 17 22:06:10 2012 (r244368)
+++ head/sys/dev/arcmsr/arcmsr.c Tue Dec 18 00:00:07 2012 (r244369)
@@ -2432,14 +2432,13 @@ static void arcmsr_bus_reset(struct Adap
static void arcmsr_handle_virtual_command(struct AdapterControlBlock *acb,
union ccb * pccb)
{
- pccb->ccb_h.status |= CAM_REQ_CMP;
switch (pccb->csio.cdb_io.cdb_bytes[0]) {
case INQUIRY: {
unsigned char inqdata[36];
char *buffer=pccb->csio.data_ptr;
if (pccb->ccb_h.target_lun) {
- pccb->ccb_h.status |= CAM_SEL_TIMEOUT;
+ pccb->ccb_h.status |= CAM_DEV_NOT_THERE;
xpt_done(pccb);
return;
}
@@ -2455,6 +2454,7 @@ static void arcmsr_handle_virtual_comman
strncpy(&inqdata[16], "RAID controller ", 16); /* Product Identification */
strncpy(&inqdata[32], "R001", 4); /* Product Revision */
memcpy(buffer, inqdata, sizeof(inqdata));
+ pccb->ccb_h.status |= CAM_REQ_CMP;
xpt_done(pccb);
}
break;
@@ -2464,10 +2464,12 @@ static void arcmsr_handle_virtual_comman
pccb->ccb_h.status |= CAM_SCSI_STATUS_ERROR;
pccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
}
+ pccb->ccb_h.status |= CAM_REQ_CMP;
xpt_done(pccb);
}
break;
default:
+ pccb->ccb_h.status |= CAM_REQ_CMP;
xpt_done(pccb);
}
}
More information about the svn-src-all
mailing list