From 03f042f32ea4a1b4d4867c8d56885f1f29f8b5b0 Mon Sep 17 00:00:00 2001 From: marius Date: Thu, 13 Oct 2011 20:06:19 +0000 Subject: Merge from r225950: Set the sense residual properly. Reviewed by: ken --- sys/dev/aac/aac_cam.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'sys/dev/aac') diff --git a/sys/dev/aac/aac_cam.c b/sys/dev/aac/aac_cam.c index 130cd20..b5c3b26 100644 --- a/sys/dev/aac/aac_cam.c +++ b/sys/dev/aac/aac_cam.c @@ -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); } -- cgit v1.1