PERFORCE change 167622 for review
Alexander Motin
mav at FreeBSD.org
Sat Aug 22 18:29:32 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=167622
Change 167622 by mav at mav_mavbook on 2009/08/22 18:29:14
Improve error reporting in ATA_CAM wrapper.
Affected files ...
.. //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.c#24 edit
Differences ...
==== //depot/projects/scottl-camlock/src/sys/dev/ata/ata-all.c#24 (text+ko) ====
@@ -1246,13 +1246,35 @@
//device_printf(dev, "%s\n", __func__);
ccb->ccb_h.status &= ~CAM_STATUS_MASK;
- if (request->result == 0)
+ if (request->flags & ATA_R_TIMEOUT)
+ ccb->ccb_h.status |= CAM_CMD_TIMEOUT;
+ else if (request->status & ATA_S_ERROR) {
+ if (ccb->ccb_h.func_code == XPT_ATA_IO) {
+ ccb->ccb_h.status |= CAM_ATA_STATUS_ERROR;
+ } else {
+ ccb->ccb_h.status |= CAM_SCSI_STATUS_ERROR;
+ ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
+ }
+ } else if (request->result != 0)
+ ccb->ccb_h.status |= CAM_REQ_CMP_ERR;
+ else
ccb->ccb_h.status |= CAM_REQ_CMP;
- else if (ccb->ccb_h.func_code == XPT_SCSI_IO) {
- ccb->ccb_h.status |= CAM_SCSI_STATUS_ERROR;
- ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
- } else
- ccb->ccb_h.status |= CAM_REQ_CMP_ERR;
+ if (ccb->ccb_h.func_code == XPT_ATA_IO &&
+ ((request->status & ATA_S_ERROR) ||
+ (ccb->ataio.cmd.flags & CAM_ATAIO_NEEDRESULT))) {
+ struct ata_res *res = &ccb->ataio.res;
+ res->status = request->status;
+ res->error = request->error;
+ res->lba_low = request->u.ata.lba;
+ res->lba_mid = request->u.ata.lba >> 8;
+ res->lba_high = request->u.ata.lba >> 16;
+ res->device = request->u.ata.lba >> 24;
+ res->lba_low_exp = request->u.ata.lba >> 24;
+ res->lba_mid_exp = request->u.ata.lba >> 32;
+ res->lba_high_exp = request->u.ata.lba >> 40;
+ res->sector_count = request->u.ata.count;
+ res->sector_count_exp = request->u.ata.count >> 8;
+ }
ata_free_request(request);
xpt_done(ccb);
}
More information about the p4-projects
mailing list