we do some scsi ops where we give a device a large buffer and expect it to only fill part of it because we dont know how big that part will be.
the underrun handling in mpii always caused this to fail, so devices relying on this didnt work as expected (eg, ses). according to the solaris driver we only get underruns on ok scsi commands, so we dont have to check the NO_SCSI_STATUS bit, we can trust that its ok but with a residual calculation. tests please :) Index: mpii.c =================================================================== RCS file: /cvs/src/sys/dev/pci/mpii.c,v retrieving revision 1.38 diff -u -p -r1.38 mpii.c --- mpii.c 21 Feb 2011 09:36:15 -0000 1.38 +++ mpii.c 21 Feb 2011 13:03:15 -0000 @@ -4649,11 +4649,7 @@ mpii_scsi_cmd_done(struct mpii_ccb *ccb) switch (letoh16(sie->ioc_status) & MPII_IOCSTATUS_MASK) { case MPII_IOCSTATUS_SCSI_DATA_UNDERRUN: xs->resid = xs->datalen - letoh32(sie->transfer_count); - if (sie->scsi_state & MPII_SCSIIO_ERR_STATE_NO_SCSI_STATUS) { - xs->error = XS_DRIVER_STUFFUP; - break; - } - /* FALLTHROUGH */ + break; case MPII_IOCSTATUS_SUCCESS: case MPII_IOCSTATUS_SCSI_RECOVERED_ERROR: switch (xs->status) {