linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* old-EH and SAS (was Re: [PATCH 2/2] block: add function for waiting for a specific free tag)
       [not found]   ` <4A13EFBC.4010005@gmail.com>
@ 2009-05-20 19:34     ` Jeff Garzik
  2009-05-21 16:34       ` Brian King
  0 siblings, 1 reply; 2+ messages in thread
From: Jeff Garzik @ 2009-05-20 19:34 UTC (permalink / raw)
  To: Tejun Heo; +Cc: Jens Axboe, linux-ide, Brian King, linux-scsi


(changing subject...)

> there won't be any race around it (the old-EH path is broken if
> invoked with commands in flight anyway, so doesn't matter).  Also, as

Speaking of the old-EH...  as of 
67651ee5710c45ea62fae68b768d65395ccf47c2 there are no drivers/ata/* 
drivers remaining that use old-EH.

old-EH now exists _entirely_ for a couple SAS drivers, and it is an ugly 
hack, so I wanted to take a moment to think about SAS, SATA, and 
SATA+SAS error handling.

The currently we have a few distinct phy+link configurations that EH 
must deal with, and each requires its own implementation (this ignores 
legacy SFF and other non-phy topologies):

1) SATA PHY.  This is what libata EH handles now: direct control over 
SATA PHY and link.

2) SAS+SATA PHY.  Essentially a super-set of #1, this includes nested 
expander configurations, direct attachment of SAS or SATA, etc.  Uses 
libsas.

3) SAS+SATA firmware.  Not quite as "low level" as #2, does not use libsas.

Each one of these clearly should use the same code for configuring and 
managing ATA devices, including per-device EH.

Move up to the link level, and things start to get ugly.

_Ideally_, libsas should take over all of link exception handling from 
libata, except for the final-link PMP handling.  In reality, I think we 
will have to deal with libsas doing 100% of link EH including PMP 
handling, and libata will continue to perform link EH w/ PMP for !libsas 
hardware.

The integration of discovery is pretty poor -- you wind up with one glob 
of SATA devices and another glob of SCSI devices, with two separate 
EH+scan processes.  Ideally libsas should tell libata to scan a single 
SATA phy, and handle parallelism/exclusion in libsas for SATA+SAS 
configurations.

Brian King did a new-EH conversion for ipr, some time ago.  Maybe that 
work could be picked up, extended to libsas, and permit removal of all 
the old-EH code remaining in libata.

Maybe I should s/eng_timeout/sas_timeout/ to emphasize the current state 
of code ;-)

	Jeff





^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: old-EH and SAS (was Re: [PATCH 2/2] block: add function for waiting for a specific free tag)
  2009-05-20 19:34     ` old-EH and SAS (was Re: [PATCH 2/2] block: add function for waiting for a specific free tag) Jeff Garzik
@ 2009-05-21 16:34       ` Brian King
  0 siblings, 0 replies; 2+ messages in thread
From: Brian King @ 2009-05-21 16:34 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Tejun Heo, Jens Axboe, linux-ide, linux-scsi

Jeff Garzik wrote:
> Brian King did a new-EH conversion for ipr, some time ago.  Maybe that
> work could be picked up, extended to libsas, and permit removal of all
> the old-EH code remaining in libata.

There are a couple different ways to accomplish this, and they relate to
how many scsi hosts we end up using for a single SAS HBA.

Single scsi_host solution
This solution really requires libata to more or less stop using scsi core.
At the very least the concept of it "owning" the scsi host must go away.
Additionally, as far as EH goes, quiescing the entire scsi host each time
we want to do some exception handling for a SATA device kills the performance
of the SAS devices on the HBA, so we would need to have a better layered
EH that only quiesced what needs to be quiesced and then called out to
different pluggable EH handling routines.

Multiple scsi_host solution
This is what my patch to ipr did. It was the path of least resistance at
the time and worked reasonably well for ipr, but may not have been the
best solution for libsas without further enhancements. In this solution,
there is a scsi_host for each ATA port found on the SAS fabric. This
allows most of the existing libata code to simply work with minimal changes.
The biggest issue with this approach is we lose adapter queue depth tracking.
We really would need queue groups or some similar solution in order for this
to work for libsas.

-Brian

-- 
Brian King
Linux on Power Virtualization
IBM Linux Technology Center



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-05-21 16:34 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20090520065942.GD11363@kernel.dk>
     [not found] ` <20090520070104.GF11363@kernel.dk>
     [not found]   ` <4A13EFBC.4010005@gmail.com>
2009-05-20 19:34     ` old-EH and SAS (was Re: [PATCH 2/2] block: add function for waiting for a specific free tag) Jeff Garzik
2009-05-21 16:34       ` Brian King

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).