1c1caa5507
incorporate some notion of which revision the device is. If it's < SCSI2, for example, READ BLOCK LIMITS is not a MANDATORY command. At any rate, the initial state is to try and read block limits to get a notion of the smallest and largest record size as well as the granularity. However, this doesn't mean that the device should actually *in* fixed block mode should the max && min be equal... *That* choice is (for now) determined by whether the device comes up with a blocksize of nonzero. If so, then it's a fixed block preferred device, otherwise not (this will change again soon). When actually doing I/O, and you're in fixed length mode, the block count is *not* the byte count divided by the minimum block size- it's the byte count divided by the current blocksize (or use shift/mask shortcuts if that worked out...). Then when you *change* the blocksize via an ioctl, make sure this actually propagates to the stored notion of blocksize (and update the shift/mask shortcuts). Misc Other: When doing a mode select, only use the SCSI_SAME_DENSITY (0x7f) code if the device is >= SCSI2- otherwise just use the saved density code. Recover from the ripple of ILLEGAL REQUEST not being 'retried' in that RESERVE/RELEASE is not a mandatory command for < SCSI2 (so ignore it if it fails). |
||
---|---|---|
.. | ||
scsi_all.c | ||
scsi_all.h | ||
scsi_cd.c | ||
scsi_cd.h | ||
scsi_ch.c | ||
scsi_ch.h | ||
scsi_da.c | ||
scsi_da.h | ||
scsi_message.h | ||
scsi_pass.c | ||
scsi_pass.h | ||
scsi_pt.c | ||
scsi_pt.h | ||
scsi_sa.c | ||
scsi_sa.h | ||
scsi_target.c | ||
scsi_targetio.h |