svn commit: r226910 - in stable/9/sys/dev: aac asr hptiop mfi
Marius Strobl
marius at FreeBSD.org
Sat Oct 29 22:06:54 UTC 2011
Author: marius
Date: Sat Oct 29 22:06:53 2011
New Revision: 226910
URL: http://svn.freebsd.org/changeset/base/226910
Log:
Merge from r225950:
Set the sense residual properly.
Reviewed by: ken
Approved by: re (kib)
Modified:
stable/9/sys/dev/aac/aac_cam.c
stable/9/sys/dev/asr/asr.c
stable/9/sys/dev/hptiop/hptiop.c
stable/9/sys/dev/mfi/mfi_cam.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/amd64/include/xen/ (props changed)
stable/9/sys/boot/ (props changed)
stable/9/sys/boot/i386/efi/ (props changed)
stable/9/sys/boot/ia64/efi/ (props changed)
stable/9/sys/boot/ia64/ski/ (props changed)
stable/9/sys/boot/powerpc/boot1.chrp/ (props changed)
stable/9/sys/boot/powerpc/ofw/ (props changed)
stable/9/sys/cddl/contrib/opensolaris/ (props changed)
stable/9/sys/conf/ (props changed)
stable/9/sys/contrib/dev/acpica/ (props changed)
stable/9/sys/contrib/octeon-sdk/ (props changed)
stable/9/sys/contrib/pf/ (props changed)
stable/9/sys/contrib/x86emu/ (props changed)
Modified: stable/9/sys/dev/aac/aac_cam.c
==============================================================================
--- stable/9/sys/dev/aac/aac_cam.c Sat Oct 29 18:16:29 2011 (r226909)
+++ stable/9/sys/dev/aac/aac_cam.c Sat Oct 29 22:06:53 2011 (r226910)
@@ -532,6 +532,7 @@ aac_cam_complete(struct aac_command *cm)
union ccb *ccb;
struct aac_srb_response *srbr;
struct aac_softc *sc;
+ int sense_returned;
sc = cm->cm_sc;
fwprintf(sc, HBA_FLAGS_DBG_FUNCTION_ENTRY_B, "");
@@ -556,16 +557,17 @@ aac_cam_complete(struct aac_command *cm)
/* Take care of autosense */
if (srbr->sense_len) {
- int sense_len, scsi_sense_len;
-
- scsi_sense_len = sizeof(struct scsi_sense_data);
- bzero(&ccb->csio.sense_data, scsi_sense_len);
- sense_len = (srbr->sense_len >
- scsi_sense_len) ? scsi_sense_len :
- srbr->sense_len;
+ sense_returned = srbr->sense_len;
+ if (sense_returned < ccb->csio.sense_len)
+ ccb->csio.sense_resid =
+ ccb->csio.sense_len -
+ sense_returned;
+ else
+ ccb->csio.sense_resid = 0;
+ bzero(&ccb->csio.sense_data,
+ sizeof(struct scsi_sense_data));
bcopy(&srbr->sense[0], &ccb->csio.sense_data,
- srbr->sense_len);
- ccb->csio.sense_len = sense_len;
+ min(ccb->csio.sense_len, sense_returned));
ccb->ccb_h.status |= CAM_AUTOSNS_VALID;
// scsi_sense_print(&ccb->csio);
}
Modified: stable/9/sys/dev/asr/asr.c
==============================================================================
--- stable/9/sys/dev/asr/asr.c Sat Oct 29 18:16:29 2011 (r226909)
+++ stable/9/sys/dev/asr/asr.c Sat Oct 29 22:06:53 2011 (r226910)
@@ -3071,6 +3071,14 @@ asr_intr(Asr_softc_t *sc)
&& (size > ccb->csio.sense_len)) {
size = ccb->csio.sense_len;
}
+ if (size < ccb->csio.sense_len) {
+ ccb->csio.sense_resid =
+ ccb->csio.sense_len - size;
+ } else {
+ ccb->csio.sense_resid = 0;
+ }
+ bzero(&(ccb->csio.sense_data),
+ sizeof(ccb->csio.sense_data));
bcopy(Reply->SenseData,
&(ccb->csio.sense_data), size);
}
@@ -3566,6 +3574,12 @@ ASR_queue_i(Asr_softc_t *sc, PI2O_MESSAG
if (size > sizeof(ccb->csio.sense_data)) {
size = sizeof(ccb->csio.sense_data);
}
+ if (size < ccb->csio.sense_len) {
+ ccb->csio.sense_resid = ccb->csio.sense_len - size;
+ } else {
+ ccb->csio.sense_resid = 0;
+ }
+ bzero(&(ccb->csio.sense_data), sizeof(ccb->csio.sense_data));
bcopy(&(ccb->csio.sense_data), Reply_Ptr->SenseData, size);
I2O_SCSI_ERROR_REPLY_MESSAGE_FRAME_setAutoSenseTransferCount(
Reply_Ptr, size);
Modified: stable/9/sys/dev/hptiop/hptiop.c
==============================================================================
--- stable/9/sys/dev/hptiop/hptiop.c Sat Oct 29 18:16:29 2011 (r226909)
+++ stable/9/sys/dev/hptiop/hptiop.c Sat Oct 29 22:06:53 2011 (r226910)
@@ -424,6 +424,13 @@ srb_complete:
ccb->ccb_h.status = CAM_BUSY;
break;
case IOP_RESULT_CHECK_CONDITION:
+ memset(&ccb->csio.sense_data, 0,
+ sizeof(ccb->csio.sense_data));
+ if (dxfer < ccb->csio.sense_len)
+ ccb->csio.sense_resid = ccb->csio.sense_len -
+ dxfer;
+ else
+ ccb->csio.sense_resid = 0;
if (srb->srb_flag & HPT_SRB_FLAG_HIGH_MEM_ACESS) {/*iop*/
bus_space_read_region_1(hba->bar0t, hba->bar0h,
index + offsetof(struct hpt_iop_request_scsi_command,
@@ -573,6 +580,13 @@ static void hptiop_request_callback_mv(s
ccb->ccb_h.status = CAM_BUSY;
break;
case IOP_RESULT_CHECK_CONDITION:
+ memset(&ccb->csio.sense_data, 0,
+ sizeof(ccb->csio.sense_data));
+ if (req->dataxfer_length < ccb->csio.sense_len)
+ ccb->csio.sense_resid = ccb->csio.sense_len -
+ req->dataxfer_length;
+ else
+ ccb->csio.sense_resid = 0;
memcpy(&ccb->csio.sense_data, &req->sg_list,
MIN(req->dataxfer_length, sizeof(ccb->csio.sense_data)));
ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR;
Modified: stable/9/sys/dev/mfi/mfi_cam.c
==============================================================================
--- stable/9/sys/dev/mfi/mfi_cam.c Sat Oct 29 18:16:29 2011 (r226909)
+++ stable/9/sys/dev/mfi/mfi_cam.c Sat Oct 29 22:06:53 2011 (r226910)
@@ -354,7 +354,13 @@ mfip_done(struct mfi_command *cm)
ccbh->status = CAM_SCSI_STATUS_ERROR | CAM_AUTOSNS_VALID;
csio->scsi_status = pt->header.scsi_status;
- sense_len = min(pt->header.sense_len, sizeof(struct scsi_sense_data));
+ if (pt->header.sense_len < csio->sense_len)
+ csio->sense_resid = csio->sense_len -
+ pt->header.sense_len;
+ else
+ csio->sense_resid = 0;
+ sense_len = min(pt->header.sense_len,
+ sizeof(struct scsi_sense_data));
bzero(&csio->sense_data, sizeof(struct scsi_sense_data));
bcopy(&cm->cm_sense->data[0], &csio->sense_data, sense_len);
break;
More information about the svn-src-stable-9
mailing list