Talked to James Bottomley and the linux-scsi list, and got some useful information, but I still have a pile of questions and the thread is ongoing. The best available documentation in this area is explicitly out of date, and needs to be updated. The best starting point seems to be the 2.4 SCSI Subsystem HOWTO ( http://sg.torque.net/scsi/SCSI-2.4-HOWTO.html ) about half of which is still relevant. (Alas, which half is not always clear.) The SCSI subsystem is implemented in three layers: the "upper" layer provides block and char devices (three block devices: sd - disk, sr - cdrom, st - tape, and a char device: sg - "generic" for bypassing the above and sending scsi command packets directly to a device to do a low level format or some such). How does this relate to the block layer? According to Douglas Gilbert (author of most of the existing SCSI documentation) the block layer is "either a nuisance, irrelevant or a complete anachronism", which I find kind of an annoying viewpoint because there are non-scsi block devices in the world. (People think I'm joking when I predict the ramdisk being routed through the scsi layer someday...) The SCSI Generic Howto ( http://sg.torque.net/sg/p/sg_v3_ho.html ) is quite detailed and very low level. It's about the implementation details of a driver (a char device) to tunnel SCSI commands to devices that understand them. What they take for granted is the assumption that the reader knows why anyone would want to do this. I believe that ioctl(SG_IO) can now be called on most block devices, so the need for sg devices is someone diminished unless A) you need to queue up multiple scsi scommands for performance reasons, B) you're talking to something like a parallel scsi scanner that doesn't present a block device interface. I have pending questions about all of this... The actual SCSI standards are at http://www.t10.org/scsi-3.htm but there are a lot of them (often in several different versions), they're primiarily only of interest to scsi subsystem maintainers rather than people trying to use these devices, and I'm still trying to sort out which bits of which standards are relevant to what. There are a some man pages (like "man 4 sd") that once related to this, but are so out of date they provide very little information. The Documentation/scsi directory has several files, but most are about various low-level drivers for specific hardware. The "infrastructure" files would appear to be: Useful documentation about the scsi mid-layer: scsi_mid_low_api.txt: How to plug a low-level driver in to the scsi-mid-layer, and details of the mid-layer, circa 2.6.8. Pretty good, albeit something you'd expect to be in "make htmldocs" instead of here. scsi_eh.txt: error handling infrastructure. Less useful documentation: scsi.txt: a pointer to the scsi-2.4 howto and some notes about using a scsi driver as a module. No other useful information. scsi-generic.txt: A pointer to the above scsi generic html file. I note that there's a document on scsi-tape, but not on scsi-disk. Also, I'm not sure how to categorize the scsi fiber channel transport file... I'm still trying to figure out all sorts of things (such as the real relationship between the scsi mid-layer and the block layer and when you actually need the scsi-generic devices). This is very much a work in progress... The most useful thing to do here would be to trim out the obsolete material from SCSI-2.4-HOWTO (devfs, ide-scsi, changes from 2.2 to 2.4, etc) and then fill in the gaps. I'm not currently up to this, but possibly I could help the original maintainer do it if he's interested... Rob -- "One of my most productive days was throwing away 1000 lines of code." - Ken Thompson. - To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html