mbox

[v6,0/7] libsas error handling + discovery v6

Message ID 20120121014910.24930.54011.stgit@localhost6.localdomain6
State Not Applicable
Delegated to: David Miller
Headers show

Pull-request

git://git.kernel.org/pub/scm/linux/kernel/git/djbw/isci.git libsas-eh-reworks-v6

Message

Dan Williams Jan. 21, 2012, 1:50 a.m. UTC
Changes since v5: http://marc.info/?l=linux-scsi&m=132656475829637&w=2

1/ Reworked "libsas: let libata recover links that fail to transmit initial
   sig-fis" to better handle problematic expanders and slow to attach ata
   devices.  libsas will now validate linkrate and take 'device-type' into
   account when determining if a new device is attached.

2/ Added support for asynchronously scanning ata devices.

3/ Reworked "libsas: fix sas_unregister_ports vs sas_drain_work" as lockdep
   complained about the original.

4/ New patch "libsas: fix sas port naming" makes direct-attached device naming
   more predictable and consistent with expander attached device naming.

5/ Made scan order more predictable by ensuring that regardless of device type
   we always attach in discovery order.  Slow to link devices will still be
   scanned out of order, link needs to be in at least the 'stp pending' state
   before the device will be considered attached.

---

Dan Williams (7):
      libsas: fix sas_unregister_ports vs sas_drain_work
      libsas: improve ata debug statements
      libsas: fix sas port naming
      libsas: let libata recover links that fail to transmit initial sig-fis
      libsas: delete device on sas address changed
      libsas: restore scan order
      libsas: async ata scanning


 drivers/ata/libata-core.c           |   34 +++--
 drivers/ata/libata-scsi.c           |   13 ++
 drivers/ata/libata.h                |    1 
 drivers/scsi/aic94xx/aic94xx_init.c |    1 
 drivers/scsi/isci/init.c            |    1 
 drivers/scsi/libsas/sas_ata.c       |  187 +++++++++++++++++++++--------
 drivers/scsi/libsas/sas_discover.c  |   47 +++++--
 drivers/scsi/libsas/sas_event.c     |   19 ++-
 drivers/scsi/libsas/sas_expander.c  |  229 +++++++++++++++++++++--------------
 drivers/scsi/libsas/sas_init.c      |   18 ++-
 drivers/scsi/libsas/sas_internal.h  |   16 ++
 drivers/scsi/libsas/sas_port.c      |    2 
 drivers/scsi/libsas/sas_scsi_host.c |   18 ---
 drivers/scsi/mvsas/mv_init.c        |    1 
 drivers/scsi/pm8001/pm8001_init.c   |    1 
 include/linux/libata.h              |    1 
 include/scsi/libsas.h               |    1 
 include/scsi/sas.h                  |    4 -
 include/scsi/sas_ata.h              |   23 ++--
 19 files changed, 398 insertions(+), 219 deletions(-)


Full snapshot in git:  note that libsas-eh-reworks-v4..libsas-eh-reworks-v6 is
a fast-forward, but that will not always be the case.

The following changes since commit 76ffe8a3f766358a0ade543153625b3e4e66159d:

  [SCSI] libfc: remove redundant timer init for fcp (2012-01-16 12:47:18 +0400)

are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/djbw/isci.git libsas-eh-reworks-v6

Dan Williams (47):
      libsas: remove unused ata_task_resp fields
      libsas: kill sas_slave_destroy
      libsas: fix domain_device leak
      libsas: fix leak of dev->sata_dev.identify_[packet_]device
      libsas: replace event locks with atomic bitops
      libsas: convert ha->state to flags
      libsas: introduce sas_drain_work()
      libsas: remove ata_port.lock management duties from lldds
      libsas: convert dev->gone to flags
      libsas: prevent domain rediscovery competing with ata error handling
      libsas: use ->set_dmamode to notify lldds of NCQ parameters
      libsas: kill invocation of scsi_eh_finish_cmd from sas_ata_task_done
      libsas: close error handling vs sas_ata_task_done() race
      libsas: prevent double completion of scmds from eh
      libsas: fix timeout vs completion race
      libsas: let libata handle command timeouts
      libsas: defer SAS_TASK_NEED_DEV_RESET commands to libata
      libsas: use libata-eh-reset for sata rediscovery fis transmit failures
      libsas: perform sas-transport resets in shost->workq context
      libsas: execute transport link resets with libata-eh via host workqueue
      libsas: sas_phy_enable via transport_sas_phy_reset
      libsas: async ata-eh
      libsas: poll for ata device readiness after reset
      libsas: don't mark expanders as gone when a child device is removed
      libsas: check for 'gone' expanders in smp_execute_task()
      libsas: fix sas_find_local_phy(), take phy references
      libsas: don't recover 'gone' devices in sas_ata_hard_reset()
      isci: kill iphy->isci_port lookups
      isci: kill isci_port->status
      isci: fix interpretation of "hard" reset
      isci: stop interpreting ->lldd_lu_reset() as an ata soft-reset
      isci: ->lldd_ata_check_ready handler
      isci: remove bus and reset handlers
      isci: remove IDEV_EH hack to disable "discovery-time" ata resets
      libsas: pre-clean commands that won the eh vs completion race
      libsas: feed the scsi_block_when_processing_errors() meter
      libsas: mark all domain devices gone if root port disappears
      libsas: close scsi_remove_target() vs libata-eh race
      libsas: fix mixed topology recovery
      libsas: route local link resets through ata-eh
      libsas: fix sas_unregister_ports vs sas_drain_work
      libsas: improve ata debug statements
      libsas: fix sas port naming
      libsas: let libata recover links that fail to transmit initial sig-fis
      libsas: delete device on sas address changed
      libsas: restore scan order
      libsas: async ata scanning

Jeff Skirvin (2):
      libsas: Remove redundant phy state notification calls.
      libsas: add mutex for SMP task execution

Maciej Trela (1):
      libsas: kill spurious sas_put_device

 Documentation/scsi/libsas.txt       |   15 -
 drivers/ata/libata-core.c           |   34 +-
 drivers/ata/libata-eh.c             |    1 +
 drivers/ata/libata-scsi.c           |   13 +
 drivers/ata/libata.h                |    2 +-
 drivers/scsi/aic94xx/aic94xx.h      |    2 +
 drivers/scsi/aic94xx/aic94xx_dev.c  |   38 +-
 drivers/scsi/aic94xx/aic94xx_init.c |    6 +-
 drivers/scsi/aic94xx/aic94xx_tmf.c  |    9 +-
 drivers/scsi/isci/host.c            |    8 +-
 drivers/scsi/isci/host.h            |   19 +-
 drivers/scsi/isci/init.c            |   14 +-
 drivers/scsi/isci/phy.c             |   18 +-
 drivers/scsi/isci/phy.h             |    1 -
 drivers/scsi/isci/port.c            |  217 +++++-----
 drivers/scsi/isci/port.h            |   11 +-
 drivers/scsi/isci/remote_device.c   |   32 +-
 drivers/scsi/isci/remote_device.h   |    7 +-
 drivers/scsi/isci/request.c         |  198 +--------
 drivers/scsi/isci/request.h         |    9 +-
 drivers/scsi/isci/task.c            |  158 ++------
 drivers/scsi/isci/task.h            |   40 --
 drivers/scsi/libsas/sas_ata.c       |  818 +++++++++++++++++------------------
 drivers/scsi/libsas/sas_discover.c  |  204 +++++++--
 drivers/scsi/libsas/sas_event.c     |   96 ++++-
 drivers/scsi/libsas/sas_expander.c  |  304 +++++++++-----
 drivers/scsi/libsas/sas_host_smp.c  |   11 +-
 drivers/scsi/libsas/sas_init.c      |  211 ++++++++-
 drivers/scsi/libsas/sas_internal.h  |   80 +++--
 drivers/scsi/libsas/sas_phy.c       |   12 +-
 drivers/scsi/libsas/sas_port.c      |   30 +-
 drivers/scsi/libsas/sas_scsi_host.c |  354 +++++++---------
 drivers/scsi/mvsas/mv_init.c        |    2 -
 drivers/scsi/mvsas/mv_sas.c         |   11 +-
 drivers/scsi/pm8001/pm8001_init.c   |    2 -
 drivers/scsi/pm8001/pm8001_sas.c    |   29 +-
 drivers/scsi/scsi_transport_sas.c   |   59 +++-
 include/linux/libata.h              |    2 +
 include/scsi/libsas.h               |   70 ++--
 include/scsi/sas.h                  |    4 +-
 include/scsi/sas_ata.h              |   44 ++-
 include/scsi/scsi_transport_sas.h   |   12 +-
 42 files changed, 1686 insertions(+), 1521 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Jack Wang Jan. 21, 2012, 6:12 a.m. UTC | #1
> Changes since v5: http://marc.info/?l=linux-scsi&m=132656475829637&w=2
> 
> 1/ Reworked "libsas: let libata recover links that fail to transmit
initial
>    sig-fis" to better handle problematic expanders and slow to attach ata
>    devices.  libsas will now validate linkrate and take 'device-type' into
>    account when determining if a new device is attached.
> 
> 2/ Added support for asynchronously scanning ata devices.
> 
> 3/ Reworked "libsas: fix sas_unregister_ports vs sas_drain_work" as
lockdep
>    complained about the original.
> 
> 4/ New patch "libsas: fix sas port naming" makes direct-attached device
naming
>    more predictable and consistent with expander attached device naming.
> 
> 5/ Made scan order more predictable by ensuring that regardless of device
type
>    we always attach in discovery order.  Slow to link devices will still
be
>    scanned out of order, link needs to be in at least the 'stp pending'
state
>    before the device will be considered attached.
> 
[Jack Wang] 
Asynchronously scan really make the discovery far more quickly, with v4
reset expander will need more than 3 minites to get discovered, with this v6
patchset it takes less than 5 seconds.

Dear Dan,

Could you share how you test procedure to find out these bugs?

Thanks.
> ---
> 
> Dan Williams (7):
>       libsas: fix sas_unregister_ports vs sas_drain_work
>       libsas: improve ata debug statements
>       libsas: fix sas port naming
>       libsas: let libata recover links that fail to transmit initial
sig-fis
>       libsas: delete device on sas address changed
>       libsas: restore scan order
>       libsas: async ata scanning
> 
> 
>  drivers/ata/libata-core.c           |   34 +++--
>  drivers/ata/libata-scsi.c           |   13 ++
>  drivers/ata/libata.h                |    1
>  drivers/scsi/aic94xx/aic94xx_init.c |    1
>  drivers/scsi/isci/init.c            |    1
>  drivers/scsi/libsas/sas_ata.c       |  187 +++++++++++++++++++++--------
>  drivers/scsi/libsas/sas_discover.c  |   47 +++++--
>  drivers/scsi/libsas/sas_event.c     |   19 ++-
>  drivers/scsi/libsas/sas_expander.c  |  229
> +++++++++++++++++++++--------------
>  drivers/scsi/libsas/sas_init.c      |   18 ++-
>  drivers/scsi/libsas/sas_internal.h  |   16 ++
>  drivers/scsi/libsas/sas_port.c      |    2
>  drivers/scsi/libsas/sas_scsi_host.c |   18 ---
>  drivers/scsi/mvsas/mv_init.c        |    1
>  drivers/scsi/pm8001/pm8001_init.c   |    1
>  include/linux/libata.h              |    1
>  include/scsi/libsas.h               |    1
>  include/scsi/sas.h                  |    4 -
>  include/scsi/sas_ata.h              |   23 ++--
>  19 files changed, 398 insertions(+), 219 deletions(-)
> 
> 
> Full snapshot in git:  note that
libsas-eh-reworks-v4..libsas-eh-reworks-v6
> is
> a fast-forward, but that will not always be the case.
> 
> The following changes since commit
76ffe8a3f766358a0ade543153625b3e4e66159d:
> 
>   [SCSI] libfc: remove redundant timer init for fcp (2012-01-16 12:47:18
+0400)
> 
> are available in the git repository at:
>   git://git.kernel.org/pub/scm/linux/kernel/git/djbw/isci.git
> libsas-eh-reworks-v6
> 
> Dan Williams (47):
>       libsas: remove unused ata_task_resp fields
>       libsas: kill sas_slave_destroy
>       libsas: fix domain_device leak
>       libsas: fix leak of dev->sata_dev.identify_[packet_]device
>       libsas: replace event locks with atomic bitops
>       libsas: convert ha->state to flags
>       libsas: introduce sas_drain_work()
>       libsas: remove ata_port.lock management duties from lldds
>       libsas: convert dev->gone to flags
>       libsas: prevent domain rediscovery competing with ata error handling
>       libsas: use ->set_dmamode to notify lldds of NCQ parameters
>       libsas: kill invocation of scsi_eh_finish_cmd from sas_ata_task_done
>       libsas: close error handling vs sas_ata_task_done() race
>       libsas: prevent double completion of scmds from eh
>       libsas: fix timeout vs completion race
>       libsas: let libata handle command timeouts
>       libsas: defer SAS_TASK_NEED_DEV_RESET commands to libata
>       libsas: use libata-eh-reset for sata rediscovery fis transmit
failures
>       libsas: perform sas-transport resets in shost->workq context
>       libsas: execute transport link resets with libata-eh via host
workqueue
>       libsas: sas_phy_enable via transport_sas_phy_reset
>       libsas: async ata-eh
>       libsas: poll for ata device readiness after reset
>       libsas: don't mark expanders as gone when a child device is removed
>       libsas: check for 'gone' expanders in smp_execute_task()
>       libsas: fix sas_find_local_phy(), take phy references
>       libsas: don't recover 'gone' devices in sas_ata_hard_reset()
>       isci: kill iphy->isci_port lookups
>       isci: kill isci_port->status
>       isci: fix interpretation of "hard" reset
>       isci: stop interpreting ->lldd_lu_reset() as an ata soft-reset
>       isci: ->lldd_ata_check_ready handler
>       isci: remove bus and reset handlers
>       isci: remove IDEV_EH hack to disable "discovery-time" ata resets
>       libsas: pre-clean commands that won the eh vs completion race
>       libsas: feed the scsi_block_when_processing_errors() meter
>       libsas: mark all domain devices gone if root port disappears
>       libsas: close scsi_remove_target() vs libata-eh race
>       libsas: fix mixed topology recovery
>       libsas: route local link resets through ata-eh
>       libsas: fix sas_unregister_ports vs sas_drain_work
>       libsas: improve ata debug statements
>       libsas: fix sas port naming
>       libsas: let libata recover links that fail to transmit initial
sig-fis
>       libsas: delete device on sas address changed
>       libsas: restore scan order
>       libsas: async ata scanning
> 
> Jeff Skirvin (2):
>       libsas: Remove redundant phy state notification calls.
>       libsas: add mutex for SMP task execution
> 
> Maciej Trela (1):
>       libsas: kill spurious sas_put_device
> 
>  Documentation/scsi/libsas.txt       |   15 -
>  drivers/ata/libata-core.c           |   34 +-
>  drivers/ata/libata-eh.c             |    1 +
>  drivers/ata/libata-scsi.c           |   13 +
>  drivers/ata/libata.h                |    2 +-
>  drivers/scsi/aic94xx/aic94xx.h      |    2 +
>  drivers/scsi/aic94xx/aic94xx_dev.c  |   38 +-
>  drivers/scsi/aic94xx/aic94xx_init.c |    6 +-
>  drivers/scsi/aic94xx/aic94xx_tmf.c  |    9 +-
>  drivers/scsi/isci/host.c            |    8 +-
>  drivers/scsi/isci/host.h            |   19 +-
>  drivers/scsi/isci/init.c            |   14 +-
>  drivers/scsi/isci/phy.c             |   18 +-
>  drivers/scsi/isci/phy.h             |    1 -
>  drivers/scsi/isci/port.c            |  217 +++++-----
>  drivers/scsi/isci/port.h            |   11 +-
>  drivers/scsi/isci/remote_device.c   |   32 +-
>  drivers/scsi/isci/remote_device.h   |    7 +-
>  drivers/scsi/isci/request.c         |  198 +--------
>  drivers/scsi/isci/request.h         |    9 +-
>  drivers/scsi/isci/task.c            |  158 ++------
>  drivers/scsi/isci/task.h            |   40 --
>  drivers/scsi/libsas/sas_ata.c       |  818
> +++++++++++++++++------------------
>  drivers/scsi/libsas/sas_discover.c  |  204 +++++++--
>  drivers/scsi/libsas/sas_event.c     |   96 ++++-
>  drivers/scsi/libsas/sas_expander.c  |  304 +++++++++-----
>  drivers/scsi/libsas/sas_host_smp.c  |   11 +-
>  drivers/scsi/libsas/sas_init.c      |  211 ++++++++-
>  drivers/scsi/libsas/sas_internal.h  |   80 +++--
>  drivers/scsi/libsas/sas_phy.c       |   12 +-
>  drivers/scsi/libsas/sas_port.c      |   30 +-
>  drivers/scsi/libsas/sas_scsi_host.c |  354 +++++++---------
>  drivers/scsi/mvsas/mv_init.c        |    2 -
>  drivers/scsi/mvsas/mv_sas.c         |   11 +-
>  drivers/scsi/pm8001/pm8001_init.c   |    2 -
>  drivers/scsi/pm8001/pm8001_sas.c    |   29 +-
>  drivers/scsi/scsi_transport_sas.c   |   59 +++-
>  include/linux/libata.h              |    2 +
>  include/scsi/libsas.h               |   70 ++--
>  include/scsi/sas.h                  |    4 +-
>  include/scsi/sas_ata.h              |   44 ++-
>  include/scsi/scsi_transport_sas.h   |   12 +-
>  42 files changed, 1686 insertions(+), 1521 deletions(-)
> --
> To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dan Williams Jan. 23, 2012, 8:57 p.m. UTC | #2
On Fri, Jan 20, 2012 at 10:12 PM, Jack Wang <jack_wang@usish.com> wrote:
>> Changes since v5: http://marc.info/?l=linux-scsi&m=132656475829637&w=2
>>
>> 1/ Reworked "libsas: let libata recover links that fail to transmit
> initial
>>    sig-fis" to better handle problematic expanders and slow to attach ata
>>    devices.  libsas will now validate linkrate and take 'device-type' into
>>    account when determining if a new device is attached.
>>
>> 2/ Added support for asynchronously scanning ata devices.
>>
>> 3/ Reworked "libsas: fix sas_unregister_ports vs sas_drain_work" as
> lockdep
>>    complained about the original.
>>
>> 4/ New patch "libsas: fix sas port naming" makes direct-attached device
> naming
>>    more predictable and consistent with expander attached device naming.
>>
>> 5/ Made scan order more predictable by ensuring that regardless of device
> type
>>    we always attach in discovery order.  Slow to link devices will still
> be
>>    scanned out of order, link needs to be in at least the 'stp pending'
> state
>>    before the device will be considered attached.
>>
> [Jack Wang]
> Asynchronously scan really make the discovery far more quickly, with v4
> reset expander will need more than 3 minites to get discovered, with this v6
> patchset it takes less than 5 seconds.

Great!

> Dear Dan,
>
> Could you share how you test procedure to find out these bugs?
>

These fixes have primarily been driven by libsas ata error handling as
robust as libata, and teaching libsas that ata links need more care
and handling than it was giving before.

In the case of async probing, this is something that libata has had
since 2.6.29, but was never added to libsas.

--
Dan
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html