01 Nov, 2011

1 commit


29 Oct, 2011

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (204 commits)
    [SCSI] qla4xxx: export address/port of connection (fix udev disk names)
    [SCSI] ipr: Fix BUG on adapter dump timeout
    [SCSI] megaraid_sas: Fix instance access in megasas_reset_timer
    [SCSI] hpsa: change confusing message to be more clear
    [SCSI] iscsi class: fix vlan configuration
    [SCSI] qla4xxx: fix data alignment and use nl helpers
    [SCSI] iscsi class: fix link local mispelling
    [SCSI] iscsi class: Replace iscsi_get_next_target_id with IDA
    [SCSI] aacraid: use lower snprintf() limit
    [SCSI] lpfc 8.3.27: Change driver version to 8.3.27
    [SCSI] lpfc 8.3.27: T10 additions for SLI4
    [SCSI] lpfc 8.3.27: Fix queue allocation failure recovery
    [SCSI] lpfc 8.3.27: Change algorithm for getting physical port name
    [SCSI] lpfc 8.3.27: Changed worst case mailbox timeout
    [SCSI] lpfc 8.3.27: Miscellanous logic and interface fixes
    [SCSI] megaraid_sas: Changelog and version update
    [SCSI] megaraid_sas: Add driver workaround for PERC5/1068 kdump kernel panic
    [SCSI] megaraid_sas: Add multiple MSI-X vector/multiple reply queue support
    [SCSI] megaraid_sas: Add support for MegaRAID 9360/9380 12GB/s controllers
    [SCSI] megaraid_sas: Clear FUSION_IN_RESET before enabling interrupts
    ...

    Linus Torvalds
     

16 Oct, 2011

1 commit

  • port->dev_list maintains a list of devices attached to a given sas root port.
    It needs to be mutated under a lock as contexts outside of the
    single-threaded-libsas-workqueue access the list via sas_find_dev_by_rphy().
    Fixup locations where the list was being mutated without a lock.

    This is a follow-up to commit 5911e963 "[SCSI] libsas: remove expander
    from dev list on error", where Luben noted [1]:

    > 2/ We have unlocked list manipulations in sas_ex_discover_end_dev(),
    > sas_unregister_common_dev(), and sas_ex_discover_end_dev()

    Yes, I can see that and that is very unfortunate.

    [1]: http://marc.info/?l=linux-scsi&m=131480962006471&w=2

    Signed-off-by: Dan Williams
    Signed-off-by: James Bottomley

    Dan Williams
     

03 Oct, 2011

7 commits

  • When a wide port is being utilized to a target, if one disables only one
    of the
    phys, we get an OS crash:

    BUG: unable to handle kernel NULL pointer dereference at
    0000000000000238
    IP: [] mutex_lock+0x21/0x50
    PGD 4103f5067 PUD 41dba9067 PMD 0
    Oops: 0002 [#1] SMP
    last sysfs file: /sys/bus/pci/slots/5/address
    CPU 0
    Modules linked in: pm8001(U) ses enclosure fuse nfsd exportfs autofs4
    ipmi_devintf ipmi_si ipmi_msghandler nfs lockd fscache nfs_acl
    auth_rpcgss 8021q fcoe libfcoe garp libfc scsi_transport_fc stp scsi_tgt
    llc sunrpc cpufreq_ondemand acpi_cpufreq freq_table ipv6 sr_mod cdrom
    dm_mirror dm_region_hash dm_log uinput sg i2c_i801 i2c_core iTCO_wdt
    iTCO_vendor_support e1000e mlx4_ib ib_mad ib_core mlx4_en mlx4_core ext3
    jbd mbcache sd_mod crc_t10dif usb_storage ata_generic pata_acpi ata_piix
    libsas(U) scsi_transport_sas dm_mod [last unloaded: pm8001]

    Modules linked in: pm8001(U) ses enclosure fuse nfsd exportfs autofs4
    ipmi_devintf ipmi_si ipmi_msghandler nfs lockd fscache nfs_acl
    auth_rpcgss 8021q fcoe libfcoe garp libfc scsi_transport_fc stp scsi_tgt
    llc sunrpc cpufreq_ondemand acpi_cpufreq freq_table ipv6 sr_mod cdrom
    dm_mirror dm_region_hash dm_log uinput sg i2c_i801 i2c_core iTCO_wdt
    iTCO_vendor_support e1000e mlx4_ib ib_mad ib_core mlx4_en mlx4_core ext3
    jbd mbcache sd_mod crc_t10dif usb_storage ata_generic pata_acpi ata_piix
    libsas(U) scsi_transport_sas dm_mod [last unloaded: pm8001]
    Pid: 5146, comm: scsi_wq_5 Not tainted
    2.6.32-71.29.1.el6.lustre.7.x86_64 #1 Storage Server
    RIP: 0010:[] []
    mutex_lock+0x21/0x50
    RSP: 0018:ffff8803e4e33d30 EFLAGS: 00010246
    RAX: 0000000000000000 RBX: 0000000000000238 RCX: 0000000000000000
    RDX: 0000000000000000 RSI: ffff8803e664c800 RDI: 0000000000000238
    RBP: ffff8803e4e33d40 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000001 R12: 0000000000000000
    R13: 0000000000000238 R14: ffff88041acb7200 R15: ffff88041c51ada0
    FS: 0000000000000000(0000) GS:ffff880028200000(0000)
    knlGS:0000000000000000
    CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b
    CR2: 0000000000000238 CR3: 0000000410143000 CR4: 00000000000006f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process scsi_wq_5 (pid: 5146, threadinfo ffff8803e4e32000, task
    ffff8803e4e294a0)
    Stack:
    ffff8803e664c800 0000000000000000 ffff8803e4e33d70 ffffffffa001f06e
    ffff8803e4e33d60 ffff88041c51ada0 ffff88041acb7200 ffff88041bc0aa00
    ffff8803e4e33d90 ffffffffa0032b6c 0000000000000014 ffff88041acb7200
    Call Trace:
    [] sas_port_delete_phy+0x2e/0xa0 [scsi_transport_sas]
    [] sas_unregister_devs_sas_addr+0xac/0xe0 [libsas]
    [] sas_ex_revalidate_domain+0x204/0x330 [libsas]
    [] ? sas_revalidate_domain+0x0/0x90 [libsas]
    [] sas_revalidate_domain+0x65/0x90 [libsas]
    [] worker_thread+0x170/0x2a0
    [] ? autoremove_wake_function+0x0/0x40
    [] ? worker_thread+0x0/0x2a0
    [] kthread+0x96/0xa0
    [] child_rip+0xa/0x20
    [] ? kthread+0x0/0xa0
    [] ? child_rip+0x0/0x20
    Code: ff ff 85 c0 75 ed eb d6 66 90 55 48 89 e5 48 83 ec 10 48 89 1c 24
    4c 89 64 24 08 0f 1f 44 00 00 48 89 fb e8 92 f4 ff ff 48 89 df ff
    0f 79 05 e8 25 00 00 00 65 48 8b 04 25 08 cc 00 00 48 2d
    RIP [] mutex_lock+0x21/0x50
    RSP
    CR2: 0000000000000238

    The following patch is admittedly a band-aid, and does not solve the
    root cause, but it still is a good candidate for hardening as a pointer
    check before reference.

    Signed-off-by: Mark Salyzyn
    Tested-by: Jack Wang
    Cc: stable@kernel.org
    Signed-off-by: James Bottomley

    Mark Salyzyn
     
  • Allow the sas-transport-class to update events for local phys via a new
    PHY_FUNC_GET_EVENTS command to ->lldd_control_phy(). Fixup drivers that
    are not prepared for new enum phy_func values, and unify
    ->lldd_control_phy() error codes.

    These are the SAS defined phy events that are reported in a
    smp-report-phy-error-log command:
    * /sys/class/sas_phy//invalid_dword_count
    * /sys/class/sas_phy//running_disparity_error_count
    * /sys/class/sas_phy//loss_of_dword_sync_count
    * /sys/class/sas_phy//phy_reset_problem_count

    Signed-off-by: Dan Williams
    Signed-off-by: James Bottomley

    Dan Williams
     
  • Based on original implementation from Jiangbi Liu and Maciej Trela.

    ATAPI transfers happen in two-to-three stages. The two stage atapi
    commands are those that include a dma data transfer. The data transfer
    portion of these operations is handled by the hardware packet-dma
    acceleration. The three-stage commands do not have a data transfer and
    are handled without hardware assistance in raw frame mode.

    stage1: transmit host-to-device fis to notify the device of an incoming
    atapi cdb. Upon reception of the pio-setup-fis repost the task_context
    to perform the dma transfer of the cdb+data (go to stage3), or repost
    the task_context to transmit the cdb as a raw frame (go to stage 2).

    stage2: wait for hardware notification of the cdb transmission and then
    go to stage 3.

    stage3: wait for the arrival of the terminating device-to-host fis and
    terminate the command.

    To keep the implementation simple we only support ATAPI packet-dma
    protocol (for commands with data) to avoid needing to handle the data
    transfer manually (like we do for SATA-PIO). This may affect
    compatibility for a small number of devices (see
    ATA_HORKAGE_ATAPI_MOD16_DMA).

    If the data-transfer underruns, or encounters an error the
    device-to-host fis is expected to arrive in the unsolicited frame queue
    to pass to libata for disposition. However, in the DONE_UNEXP_FIS (data
    underrun) case it appears we need to craft a response. In the
    DONE_REG_ERR case we do receive the UF and propagate it to libsas.

    Signed-off-by: Maciej Trela
    Signed-off-by: Dan Williams
    Signed-off-by: James Bottomley

    Dan Williams
     
  • Libsas forget to set the sas_address and device type of rphy lead to file
    under /sys/class/sas_x show wrong value, fix that.

    Signed-off-by: Jack Wang
    Tested-by: Crystal Yu
    Cc: stable@kernel.org
    Signed-off-by: James Bottomley

    Jack Wang
     
  • The queue-depth for libsas-attached devices initializes to 32 and can
    only be increased manually via sysfs to a max of 64, while mpt2sas
    attached devices initialize to 254 and dynamically float via the
    midlayer ->change_queue_depth interface.

    No performance regression was observed with this change on the isci
    driver.

    Tested-by: Dave Jiang
    Signed-off-by: Dan Williams
    Signed-off-by: James Bottomley

    Dan Williams
     
  • Pass queue_depth change requests to libata, and prevent queue_type
    changes for ATA devices.

    Otherwise:
    1/ we do not honor the libata specific restrictions on the queue depth
    2/ libsas drivers that do not set sdev->tagged_supported are unable to
    change the queue_depth of ata devices via sysfs

    Signed-off-by: Dan Williams
    Acked-by: Jeff Garzik
    Signed-off-by: James Bottomley

    Dan Williams
     
  • Allow expander table-to-table attachments for
    expanders that support it.

    Signed-off-by: Luben Tuikov
    Signed-off-by: James Bottomley

    Luben Tuikov
     

22 Sep, 2011

2 commits

  • Add SFF-8485 v0.7 / SAS-1 smp-write-gpio register support to libsas.
    Defer SAS-2 support unless/until it defines an sgpio interface.

    Minimum implementation needed to get the lights blinking.
    try_test_sas_gpio_gp_bit() provides a common method to parse the
    incoming write data (raw bitstream), and the to_sas_gpio_gp_bit() helper
    routine can be used as a basis for the set/clear operations for the
    'read' implementation. Host implementations parse as many bits
    (ODx.[012]) as are locally supported and report the number of registers
    successfully written. If the submitted data overruns the internal
    number of registers available report the write as a success with the
    number of bytes remaining reported in ->resid_len.

    Example (assuming an active backplane) set the "identify" pattern for
    the first 21 devices:

    smp_write_gpio --count=2 --data=92,49,24,92,24,92,49,24 -t 4 --index=1 /dev/bsg/sas_hostX

    Signed-off-by: Dan Williams
    Signed-off-by: James Bottomley

    Dan Williams
     
  • In an enclosure model where there are chaining expanders to a large body
    of storage, it was discovered that libsas, responding to a broadcast
    event change, would only revalidate the domain of first child expander
    in the list.

    The issue is that the pointer value to the discovered source device was
    used to break out of the loop, rather than the content of the pointer.

    This still remains non-compliant as the revalidate domain code is
    supposed to loop through all child expanders, and not stop at the first
    one it finds that reports a change count. However, the design of this
    routine does not allow multiple device discoveries and that would be a
    more complicated set of patches reserved for another day. We are fixing
    the glaring bug rather than refactoring the code.

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

    Mark Salyzyn
     

31 Aug, 2011

3 commits


27 Aug, 2011

1 commit


27 Jul, 2011

1 commit

  • If expander discovery fails (sas_discover_expander()), remove the
    expander from the port device list (sas_ex_discover_expander()),
    before freeing it. Else the list is corrupted and, e.g., when we
    attempt to send SMP commands to other devices, the kernel oopses.

    Signed-off-by: Luben Tuikov
    Cc: stable@kernel.org
    Reviewed-by: Jack Wang
    Signed-off-by: James Bottomley

    Luben Tuikov
     

27 May, 2011

3 commits

  • This allows a libsas driver to optionally provide a soft reset handler
    for libata to drive. The isci driver allows software to control the
    assertion/deassertion of SRST.

    [jejb: checkpatch.pl fixes]
    Signed-off-by: Dave Jiang
    Signed-off-by: Dan Williams
    Signed-off-by: James Bottomley

    Dave Jiang
     
  • Head off doomed-to-fail i/o in sas_queuecommand before sending it down
    the ata path.

    Before:
    sd 7:0:0:0: [sdd] Synchronizing SCSI cache
    ata8: no sense translation for status: 0x00
    ata8: translated ATA stat/err 0x00/00 to SCSI SK/ASC/ASCQ 0xb/00/00
    ata8.00: device reported invalid CHS sector 0
    ata8: status=0x00 { }
    ata8: no sense translation for status: 0x00
    ata8: translated ATA stat/err 0x00/00 to SCSI SK/ASC/ASCQ 0xb/00/00
    ata8.00: device reported invalid CHS sector 0
    ata8: status=0x00 { }
    ata8: no sense translation for status: 0x00
    ata8: translated ATA stat/err 0x00/00 to SCSI SK/ASC/ASCQ 0xb/00/00
    ata8.00: device reported invalid CHS sector 0
    ata8: status=0x00 { }
    sd 7:0:0:0: [sdd] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
    sd 7:0:0:0: [sdd] Sense Key : Aborted Command [current] [descriptor]
    sd 7:0:0:0: [sdd] Add. Sense: No additional sense information
    sd 7:0:0:0: [sdd] Stopping disk

    After:
    sd 9:0:0:0: [sdd] Synchronizing SCSI cache
    sd 9:0:0:0: [sdd] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
    sd 9:0:0:0: [sdd] Stopping disk
    sd 9:0:0:0: [sdd] START_STOP FAILED
    sd 9:0:0:0: [sdd] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK

    This is a cosmetic change as sata i/o can still leak to a gone device,
    but this addresses the nominal hotplug case when releasing the target.

    Acked-by: Jack Wang
    Signed-off-by: Dan Williams
    Signed-off-by: James Bottomley

    Dan Williams
     
  • Commit 56dd2c06 "libsas: Don't issue commands to devices that have been
    hot-removed" edited Darrick's original patch to remove setting 'gone' in
    the sas_deform_port() path because that prevented scsi sync cache
    commands from being issued when the driver was unloaded. However, this
    allows true device gone notifications (as signaled port phy events) to
    trigger sync cache commands to devices that are known to be unreachable.

    Teach libsas which sas_deform_port() invocations are likely device gone
    events.

    Signed-off-by: Dan Williams
    Signed-off-by: James Bottomley

    Dan Williams
     

25 May, 2011

1 commit


31 Mar, 2011

1 commit


21 Mar, 2011

1 commit

  • * 'trivial' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6: (25 commits)
    video: change to new flag variable
    scsi: change to new flag variable
    rtc: change to new flag variable
    rapidio: change to new flag variable
    pps: change to new flag variable
    net: change to new flag variable
    misc: change to new flag variable
    message: change to new flag variable
    memstick: change to new flag variable
    isdn: change to new flag variable
    ieee802154: change to new flag variable
    ide: change to new flag variable
    hwmon: change to new flag variable
    dma: change to new flag variable
    char: change to new flag variable
    fs: change to new flag variable
    xtensa: change to new flag variable
    um: change to new flag variables
    s390: change to new flag variable
    mips: change to new flag variable
    ...

    Fix up trivial conflict in drivers/hwmon/Makefile

    Linus Torvalds
     

18 Mar, 2011

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (170 commits)
    [SCSI] scsi_dh_rdac: Add MD36xxf into device list
    [SCSI] scsi_debug: add consecutive medium errors
    [SCSI] libsas: fix ata list corruption issue
    [SCSI] hpsa: export resettable host attribute
    [SCSI] hpsa: move device attributes to avoid forward declarations
    [SCSI] scsi_debug: Logical Block Provisioning (SBC3r26)
    [SCSI] sd: Logical Block Provisioning update
    [SCSI] Include protection operation in SCSI command trace
    [SCSI] hpsa: fix incorrect PCI IDs and add two new ones (2nd try)
    [SCSI] target: Fix volume size misreporting for volumes > 2TB
    [SCSI] bnx2fc: Broadcom FCoE offload driver
    [SCSI] fcoe: fix broken fcoe interface reset
    [SCSI] fcoe: precedence bug in fcoe_filter_frames()
    [SCSI] libfcoe: Remove stale fcoe-netdev entries
    [SCSI] libfcoe: Move FCOE_MTU definition from fcoe.h to libfcoe.h
    [SCSI] libfc: introduce __fc_fill_fc_hdr that accepts fc_hdr as an argument
    [SCSI] fcoe, libfc: initialize EM anchors list and then update npiv EMs
    [SCSI] Revert "[SCSI] libfc: fix exchange being deleted when the abort itself is timed out"
    [SCSI] libfc: Fixing a memory leak when destroying an interface
    [SCSI] megaraid_sas: Version and Changelog update
    ...

    Fix up trivial conflicts due to whitespace differences in
    drivers/scsi/libsas/{sas_ata.c,sas_scsi_host.c}

    Linus Torvalds
     

17 Mar, 2011

1 commit


15 Mar, 2011

1 commit

  • I think this stems from a misunderstanding of how the ata error handler
    works. ata_scsi_cmd_error_handler() gets called with a passed in list
    of commands to handle. However, that list may still not be empty when
    it exits. The command ata_scsi_port_error_handler() must be called
    (which takes no list) before the list will be completely emptied. This
    bites the sas error handler because the two are called from different
    functions and the original list has gone out of scope before
    ata_scsi_port_error_handler() is called. leading to some commands
    dangling on bare stack, which is a potential memory corruption issue.
    Fix this by manually deleting all outstanding commands from the on-stack
    list before it goes out of scope.

    Signed-off-by: James Bottomley

    James Bottomley
     

02 Mar, 2011

5 commits

  • All checks of ATA_FLAG_NO_LEGACY have been removed by the commits
    c791c30670ea61f19eec390124128bf278e854fe ([libata] minor PCI IDE probe
    fixes and cleanups) and f0d36efdc624beb3d9e29b9ab9e9537bf0f25d5b (libata:
    update libata core layer to use devres), so I think it's time to finally
    get rid of this flag...

    Signed-off-by: Sergei Shtylyov
    Signed-off-by: Jeff Garzik

    Sergei Shtylyov
     
  • Commit 0d5ff566779f894ca9937231a181eb31e4adff0e (libata: convert to iomap)
    removed all checks of ATA_FLAG_MMIO but neglected to remove the flag itself.
    Do it now, at last...

    Signed-off-by: Sergei Shtylyov
    Signed-off-by: Jeff Garzik

    Sergei Shtylyov
     
  • These flags are marked as obsolete and the checks for them have been removed
    by commit 294440887b32c58d220fb54b73b7a58079b78f20 (libata-sff: kill unused
    ata_bus_reset()), so I think it's time to finally get rid of them...

    Signed-off-by: Sergei Shtylyov
    Signed-off-by: Jeff Garzik

    Sergei Shtylyov
     
  • Commit 14bdef982caeda19afe34010482867c18217c641 ([libata] convert drivers to
    use ata.h mode mask defines) didn't convert these two libata driver outside
    drivers/ata/...

    Signed-off-by: Sergei Shtylyov
    Signed-off-by: Jeff Garzik

    Sergei Shtylyov
     
  • The conversion is quite complex given that the libata new error
    handler has to be hooked into the current libsas timeout and error
    handling. The way this is done is to process all the failed commands
    via libsas first, but if they have no underlying sas task (and they're
    on a sata device) assume they are destined for the libata error
    handler and send them accordingly.

    Finally, activate the port recovery of the libata error handler for
    each port known to the host. This is somewhat suboptimal, since that
    port may not need recovering, but given the current architecture of
    the libata error handler, it's the only way; and the spurious
    activation is harmless.

    Signed-off-by: James Bottomley
    Signed-off-by: Jeff Garzik

    James Bottomley
     

01 Mar, 2011

1 commit


14 Feb, 2011

1 commit

  • The conversion is quite complex given that the libata new error
    handler has to be hooked into the current libsas timeout and error
    handling. The way this is done is to process all the failed commands
    via libsas first, but if they have no underlying sas task (and they're
    on a sata device) assume they are destined for the libata error
    handler and send them accordingly.

    Finally, activate the port recovery of the libata error handler for
    each port known to the host. This is somewhat suboptimal, since that
    port may not need recovering, but given the current architecture of
    the libata error handler, it's the only way; and the spurious
    activation is harmless.

    Signed-off-by: James Bottomley

    James Bottomley
     

25 Jan, 2011

4 commits

  • Originally, libata required the illusion that it could access the sata
    control register. Now, however, it can run perfectly well without
    them, so remove the dummy routines from libsas which tried to emulate
    them (but only ended up causing confusion).

    Signed-off-by: James Bottomley

    James Bottomley
     
  • Instead of using a config option for debugging, just dump the
    messages with KERN_DEBUG.

    Signed-off-by: James Bottomley

    James Bottomley
     
  • ATAPI check condition needs to be treated the same as a success or
    protocol return. The register returns from the PACKET command are all
    correctly positioned in the device to host register FIS and so we
    should collect them properly. Right at the moment this doesn't matter
    because libata sends a request sense always for ATAPI errors, but if
    it ever checked the registers, we should have the correct contents
    just in case.

    Signed-off-by: James Bottomley

    James Bottomley
     
  • libsas makes use of scsi_schedule_eh() but forgets to clear the
    host_eh_scheduled flag in its error handling routine. Because of this,
    the error handler thread never gets to sleep; it's constantly awake and
    trying to run the error routine leading to console spew and inability to
    run anything else (at least on a UP system). The fix is to clear the
    flag as we splice the work queue.

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

    James Bottomley
     

11 Jan, 2011

1 commit

  • * 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev:
    pata_platform: Remove CONFIG_HAVE_PATA_PLATFORM's dependencies.
    pata_hpt37x: actually limit HPT370 to UltraDMA/66
    pata_hpt3x2n: coding style cleanup
    pata_hpt37x: coding style cleanup
    pata_hpt366: coding style cleanup
    pata_hpt3x2n: calculate average f_CNT
    pata_hpt3x2n: clarify about HPT371N support
    pata_hpt{37x|3x2n}: SATA mode filtering
    [libata] avoid needlessly passing around ptr to SCSI completion func
    [libata] new driver acard_ahci, for ATP8620 host controller

    Linus Torvalds
     

06 Jan, 2011

1 commit


22 Dec, 2010

1 commit

  • To date libsas has only looked at the attached sas address when
    determining the formation of wide ports. The specification and some
    hardware expects that phys with different addresses will not form a wide
    port unless the local peer phys also match each other. Introduce a flag
    to select stricter behavior at sas_register_ha() time. The flag can be
    dropped once it is known that all libsas users expect the same behavior.

    Current drivers just initialize this field to zero and get the
    traditional behavior.

    Reported-by: Patrick Thomson
    Signed-off-by: Dan Williams
    Signed-off-by: James Bottomley

    Dan Williams