• James Bottomley's avatar
    [SCSI] ses: add new Enclosure ULD · 9927c688
    James Bottomley authored
    This adds support to SCSI for enclosure services devices. It also makes
    use of the enclosure services added in an earlier patch to display the
    enclosure topology in sysfs.
    
    At the moment, the enclosures are SAS specific, but if anyone actually
    has a non-SAS enclosure that follows the SES-2 standard, we can add that
    as well.
    
    On my Vitesse based system, the enclosures show up like this:
    
    sparkweed:~# ls -l /sys/class/enclosure/0\:0\:1\:0/
    total 0
    -r--r--r-- 1 root root 4096 2008-02-03 15:44 components
    lrwxrwxrwx 1 root root    0 2008-02-03 15:44 device -> ../../../devices/pci0000:01/0000:01:02.0/host0/port-0:0/expander-0:0/port-0:0:12/end_device-0:0:12/target0:0:1/0:0:1:0
    drwxr-xr-x 2 root root    0 2008-02-03 15:44 SLOT 000
    drwxr-xr-x 2 root root    0 2008-02-03 15:44 SLOT 001
    drwxr-xr-x 2 root root    0 2008-02-03 15:44 SLOT 002
    drwxr-xr-x 2 root root    0 2008-02-03 15:44 SLOT 003
    drwxr-xr-x 2 root root    0 2008-02-03 15:44 SLOT 004
    drwxr-xr-x 2 root root    0 2008-02-03 15:44 SLOT 005
    lrwxrwxrwx 1 root root    0 2008-02-03 15:44 subsystem -> ../../enclosure
    --w------- 1 root root 4096 2008-02-03 15:44 uevent
    
    And the individual occupied slots like this:
    
    sparkweed:~# ls -l /sys/class/enclosure/0\:0\:1\:0/SLOT\ 001/
    total 0
    -rw-r--r-- 1 root root 4096 2008-02-03 15:45 active
    lrwxrwxrwx 1 root root    0 2008-02-03 15:45 device -> ../../../../devices/pci0000:01/0000:01:02.0/host0/port-0:0/expander-0:0/port-0:0:11/end_device-0:0:11/target0:0:0/0:0:0:0
    -rw-r--r-- 1 root root 4096 2008-02-03 15:45 fault
    -rw-r--r-- 1 root root 4096 2008-02-03 15:45 locate
    -rw-r--r-- 1 root root 4096 2008-02-03 15:45 status
    lrwxrwxrwx 1 root root    0 2008-02-03 15:45 subsystem -> ../../../enclosure_component
    -r--r--r-- 1 root root 4096 2008-02-03 15:45 type
    --w------- 1 root root 4096 2008-02-03 15:45 uevent
    
    You can flash the various blinky lights by echoing to the fault and locate files.
    
    >From the device's point of view, you can see it has an enclosure like this:
    
    sparkweed:~# ls /sys/class/scsi_disk/0\:0\:0\:0/device/
    block:sda                     generic        queue_depth          state
    bsg:0:0:0:0                   iocounterbits  queue_type           subsystem
    bus                           iodone_cnt     rescan               timeout
    delete                        ioerr_cnt      rev                  type
    device_blocked                iorequest_cnt  scsi_device:0:0:0:0  uevent
    driver                        modalias       scsi_disk:0:0:0:0    vendor
    enclosure_component:SLOT 001  model          scsi_generic:sg0
    evt_media_change              power          scsi_level
    
    Note the enclosure_component:SLOT 001 which shows where in the enclosure
    this device fits.
    
    The astute will notice that I'm using SCSI VPD Inquiries to identify the
    devices.  This, unfortunately, won't work for SATA devices unless we do
    some really nasty hacking about on the SAT because the only think that
    knows the SAS addresses for SATA devices is libsas, not libata where the
    SAT resides.
    Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
    9927c688
ses.c 15.5 KB