Sg and the "proc" file system

The Linux SCSI Generic (sg) HOWTO
Prev |  | Next

# Chapter 11. Sg and the "proc" file system

The sg driver provides information about the SCSI subsystem and the current internal state of the sg driver in the `/proc/scsi/sg` directory. Some sg driver defaults can be changed by super user writing values to these "pseudo" files [1].

The following files which are readable by all:

    allow_dio       0 indicates direct IO disable, 1 for enabled
    debug           debug information including active request data
    def_reserved_size  default buffer size reserved for each file descriptor
    devices         one line of numeric data per device
    device_hdr      single line of column names corresponding to 'devices'
    device_strs     one line of vendor, product and rev info per device
    hosts           one line of numeric data per host
    host_hdr        single line of column names corresponding to 'hosts'
    host_strs       one line of host information (string) per host
    version         sg version as a number followed by a string representation

Each line in 'devices' and 'device_strs' corresponds to an sg device. For example the first line corresponds to `/dev/sg0`. The line number (origin 0) also corresponds to the sg minor device number. This mapping is local to sg and is normally the same as given by th cat /proc/scsi/scsi command which is reported by the SCSI mid level driver. The two mappings may diverge when 'remove-single-device' and 'add-single-device' are used (see the SCSI-2.4-HOWTO for more information).

Each line in 'hosts' and 'host_strs' corresponds to a SCSI host. For example the first line corresponds to the host normally represented as "scsi0". This mapping is invariant across the SCSI sub system. [So these entries could arguably be migrated to the mid level.]

The column headers in 'device_hdr' are given below. If the device is not present (and one is present after it) then a line of "-1" entries is output. Each entry is separated by a whitespace (currently a tab):

    host            host number (indexes 'hosts' table, origin 0)
    chan            channel number of device
    id              SCSI id of device
    lun             Logical Unit number of device
    type            SCSI type (e.g. 0->disk, 5->cdrom, 6->scanner)
    opens           number of opens (by sd, sr, sr and sg) at this time
    depth           maximum queue depth supported by device
    busy            number of commands being processed by host for this device
    online          1 indicates device is in normal online state, 0->offline

A SCSI device is set offline by the SCSI mid level when it decides that a device is no longer responding (e.g. the device does not respond to an SCSI INQUIRY command after it has been reset).

The column headers in 'host_hdr' are given below. Each entry is separated by a whitespace (currently a tab):

    uid             unique id (non-zero if multiple hosts of same type)
    busy            number of commands being processed for this host
    cpl             maximum number of command per lun (may be 0 if "device depth"
                    is given
    sgat            maximum elements of scatter gather the adapter (pseudo)
                    DMA can accommodate
    isa             0 -> non-ISA adapter, 1 -> ISA adapter. ISA adapters are
                    assumed to have a 24 bit address bus limit (16 MB).
    emu             0 -> real SCSI adapter, 1 -> emulated SCSI adapter
                    (e.g. ide-scsi device driver)

The 'def_reserved_size' is both readable and writable. It is only writable by root. It is initialized to the value of DEF_RESERVED_SIZE in the "sg.h" file. Values between 0 and 1048576 (which is 2 ** 20) are accepted and can be set from the command line with the following syntax:

    $ echo "262144" > /proc/scsi/sg/def_reserved_size

Note that the actual reserved buffer associated with a file descriptor could be less than 'def_reserved_size' if appropriate memory is not available. If the sg driver is compiled into the kernel (but not when it is a module) this value can also be read at /proc/sys/kernel/sg-big-buff . This latter feature is deprecated.

The 'allow_dio' is both readable and writable. It is only writable by root. When it is 0 (default) any request to do direct IO (i.e. by setting SG_FLAG_DIRECT_IO) will be ignored and indirect IO will be done instead.

### Notes

[1] | One strange quirk is that the `/proc/scsi/sg` directory will not appear if there are no SCSI devices (or pseudo devices such as USB mass storage) attached to the system. The reason for this is that in the absence of SCSI devices, the SCSI mid level does not initialize the sg driver (even if it has been loaded as a module). When the sg driver is a module and the rmmod sg is successfully executed then the `/proc/scsi/sg` directory and its contents are removed.

Prev | Home | Next
Driver and module initialization |  | /proc/scsi/sg/debug