30 Jun, 2011

1 commit

  • Noticed that when the sysfs interface of the SCSI SES
    driver was used to request a fault indication the LED
    flashed but the buzzer didn't sound. So it was doing
    what REQUEST IDENT (locate) should do.

    Changelog:
    - fix the setting of REQUEST FAULT for the device slot
    and array device slot elements in the enclosure control
    diagnostic page
    - note the potentially defective code that reads the
    FAULT SENSED and FAULT REQUESTED bits from the enclosure
    status diagnostic page

    The attached patch is against git/scsi-misc-2.6

    Signed-off-by: Douglas Gilbert
    Cc: stable@kernel.org
    Signed-off-by: James Bottomley

    Douglas Gilbert
     

24 Mar, 2011

2 commits

  • There have been many complaints that an enclosure with subenclosures
    isn't attached to by the ses driver. Until now, though, no-one had
    been willing to provide access to one.

    Subenclosures are added simply by flattening the tree (i.e. all
    subenclosure devices show up under the one main device). This may have
    consequences if the naming is only unique per subenclosure, but that's a
    bug for another day. The tested array had no page 7, so no device
    naming at all. It also only had the disk devices on one of its
    subenclosures (all the others had power, fans, temperature and various
    sensors), so testing of this is fairly rudimentary.

    Signed-off-by: James Bottomley

    James Bottomley
     
  • enclosure page 7 gives us the "pretty" names of the enclosure slots.
    Without a page 7, we can still use the enclosure code as long as we
    make up numeric names for the slots. Unfortunately, the current code
    fails to add any devices because the check for page 10 is in the wrong
    place if we have no page 7. Fix it so that devices show up even if
    the enclosure has no page 7.

    Cc: stable@kernel.org
    Signed-off-by: James Bottomley

    John Hughes
     

30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

13 Mar, 2010

1 commit

  • The few lines below the kfree of hdr_buf may go to the label err_free
    which will also free hdr_buf. The most straightforward solution seems to
    be to just move the kfree of hdr_buf after these gotos.

    A simplified version of the semantic match that finds this problem is as
    follows: (http://coccinelle.lip6.fr/)

    //
    @r@
    identifier E;
    expression E1;
    iterator I;
    statement S;
    @@

    *kfree(E);
    ... when != E = E1
    when != I(E,...) S
    when != &E
    *kfree(E);
    //

    Signed-off-by: Julia Lawall
    Cc: James Bottomley
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Julia Lawall
     

19 Jan, 2010

1 commit


23 Aug, 2009

3 commits

  • Now that hot add works correctly, if a new device is added, we're still
    operating on stale enclosure data, so fix that by updating the enclosure
    diagnostic pages when we get notified of a device hot add

    Signed-off-by: James Bottomley
    Signed-off-by: James Bottomley

    James Bottomley
     
  • Right at the moment, hot removal of a device within an enclosure does
    nothing (because the intf_remove only copes with enclosure removal not
    with component removal). Fix this by adding a function to remove the
    component. Also needed to fix the prototype of
    enclosure_remove_device, since we know the device we've removed but
    not the internal component number

    Signed-off-by: James Bottomley
    Signed-off-by: James Bottomley

    James Bottomley
     
  • In a situation either with expanders or with multiple enclosure
    devices, hot add doesn't always work. This is because we try to find
    a single enclosure device attached to the host. Fix this by looping
    over all enclosure devices attached to the host and also by making the
    find loop recognise that the enclosure devices may be expander remote
    (i.e. not parented by the host).

    Signed-off-by: James Bottomley
    Signed-off-by: James Bottomley

    James Bottomley
     

03 Apr, 2009

1 commit


13 Mar, 2009

2 commits


03 Jan, 2009

1 commit


30 Dec, 2008

1 commit


30 Jul, 2008

1 commit

  • There are a few kerneloops.org reports like this one:

    http://www.kerneloops.org/search.php?search=ses_match_to_enclosure

    That seem to imply we're running off the end of the VPD inquiry data
    (although at 512 bytes, it should be long enough for just about
    anything). we should be using correctly sized buffers anyway, so put
    those in and hope this oops goes away.

    Cc: Stable Tree
    Signed-off-by: James Bottomley

    James Bottomley
     

25 Jun, 2008

1 commit


20 Apr, 2008

1 commit


18 Feb, 2008

1 commit

  • one system: initrd get courrupted:

    RAMDISK: Compressed image found at block 0
    RAMDISK: incomplete write (-28 != 2048) 134217728
    crc error
    VFS: Mounted root (ext2 filesystem).
    Freeing unused kernel memory: 388k freed
    init_special_inode: bogus i_mode (177777)
    Warning: unable to open an initial console.
    init_special_inode: bogus i_mode (177777)
    init_special_inode: bogus i_mode (177777)
    Kernel panic - not syncing: No init found. Try passing init= option to kernel.

    bisected to
    commit 9927c68864e9c39cc317b4f559309ba29e642168
    Author: James Bottomley
    Date: Sun Feb 3 15:48:56 2008 -0600

    [SCSI] ses: add new Enclosure ULD

    changes:
    1. change char to unsigned char to avoid type change later.
    2. preserve len for page1
    3. need to move desc_ptr even the entry is not enclosure_component_device/raid.
    so keep desc_ptr on right position
    4. record page7 len, and double check if desc_ptr out of boundary before touch.
    5. fix typo in subenclosure checking: should use hdr_buf instead.

    [jejb: style fixes]

    Signed-off-by: Yinghai Lu
    Signed-off-by: James Bottomley

    Yinghai Lu
     

12 Feb, 2008

1 commit


08 Feb, 2008

1 commit

  • 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: James Bottomley

    James Bottomley