Re: [PATCH] libata: rewrite SCSI host scheme to be one per ATA host

James Bottomley
2009-04-23T18:09:01Z

On Thu, 2009-04-23 at 10:59 -0700, Grant Grundler wrote:
> > As to benefits, the phrase "more natural" means the code naturally aligns
> > with existing object topologies (ata_host becomes analagous to Scsi_Host),
> > which always has a long list of technical benefits.
> >
> > - we get to remove all the ugly hacks currently in place that assume
> > ata_port is _the_ first class object.
> > - we get to remove all the workarounds where SCSI assumes it manipulates all
> > devices on a controller (not true in current libata)
> > - SCSI (soon block) host-wide busy, block etc functionality now works as
> > expected
> > - it makes the libata conversion from SCSI to block layer easier
> > - it makes integration with SAS+SATA devices such as mvsas or ipr easier
> > - the list goes on; that is just off the top of my head, before my morning
> > Mountain Dew
>
> Your initial list is good. In particular the issue around "SCSI Host-wide busy"
> working as expected. Of all the things listed, this is the only one that *I* can
> clearly identify as a user visible functional change.
>
> I'm not familiar with the the "workarounds where SCSI assumes it manipulates
> all devices on a controller" issue. The few SATA controllers I've looked at can
> deal with each port independently - e.g. discovery and phy reset. Anyway, this
> seems to be closely tied with "SCSI Host-wide Busy".
>
> One reason I was thinking of NOT list above: "wide port" in SAS 2.0 controllers.
> aka "port aggregation". E.g. http://www.pmc-sierra.com/products/details/pm8005/
>
> To change port aggregation on the fly requires the SCSI host controller to be
> manageable object. This should be a change in transport and not a change
> in devices available....and there are some other problems with implementing
> this but this is the main one I initially see.

This isn't really a correct assessment. Wide ports are a SAS only
problem. So sas has phys and ports ... and it's the port (essentially a
virtual object) that communicates in the link diagram.

A wide port has two or more phys in it. You can see the handling of
this in libsas and the sas transport class today, but it's all handled
in a fashion completely invisible to the SCSI mid layer ... it's an
inessential abstraction, if you will.

James