SCSI Documentation (work in progress)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux