On 10/19/05 14:01, Christoph Hellwig wrote: > Add a flag to mark a PHY as attached to the HBA as opposed to beeing on > an expander. This is needed because various features are only supported > on those. This is a crude hack, the proper fix would be to use > different classes for host-attached vs expander phys. I'm looking into > that. The phy isn't quite "attached" -- i.e. at software level you do not care about that. At least I've never heard anyone (not of "the community") say that a phy is "attached". You don't need to represent that. While you can, you completely do not need to do it. All you should care about is the _port_. Take a look at SAS section 4. Also take a look at: drivers/scsi/sas/sas_phy.c, drivers/scsi/sas/sas_port.c and drivers/scsi/sas/sas_discover.c . Storage GUI applications can read the expander configuration using SMP and show this as I've shown in Announcement 1 here: http://marc.theaimsgroup.com/?l=linux-scsi&m=112629509826900&w=2 All you should care about is the _local_ phys since those are under your control, and the port formed. Luben > > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > > Index: linux-2.6/drivers/message/fusion/mptsas.c > =================================================================== > --- linux-2.6.orig/drivers/message/fusion/mptsas.c 2005-10-19 15:30:29.000000000 +0200 > +++ linux-2.6/drivers/message/fusion/mptsas.c 2005-10-19 19:49:35.000000000 +0200 > @@ -760,7 +760,7 @@ > } > > static int mptsas_probe_one_phy(struct device *dev, > - struct mptsas_phyinfo *phy_info, int index) > + struct mptsas_phyinfo *phy_info, int index, int local) > { > struct sas_phy *port; > int error; > @@ -853,6 +853,9 @@ > break; > } > > + if (local) > + port->local_attached = 1; > + > error = sas_phy_add(port); > if (error) { > sas_phy_free(port); > @@ -918,7 +921,7 @@ > } > > mptsas_probe_one_phy(&ioc->sh->shost_gendev, > - &port_info->phy_info[i], *index); > + &port_info->phy_info[i], *index, 1); > (*index)++; > } > > @@ -989,7 +992,8 @@ > } > } > > - mptsas_probe_one_phy(parent, &port_info->phy_info[i], *index); > + mptsas_probe_one_phy(parent, &port_info->phy_info[i], > + *index, 0); > (*index)++; > } > > Index: linux-2.6/include/scsi/scsi_transport_sas.h > =================================================================== > --- linux-2.6.orig/include/scsi/scsi_transport_sas.h 2005-10-19 15:30:29.000000000 +0200 > +++ linux-2.6/include/scsi/scsi_transport_sas.h 2005-10-19 19:49:35.000000000 +0200 > @@ -56,6 +56,9 @@ > enum sas_linkrate maximum_linkrate; > u8 port_identifier; > > + /* internal state */ > + unsigned int local_attached : 1; > + > /* link error statistics */ > u32 invalid_dword_count; > u32 running_disparity_error_count; > Index: linux-2.6/drivers/scsi/scsi_transport_sas.c > =================================================================== > --- linux-2.6.orig/drivers/scsi/scsi_transport_sas.c 2005-10-19 19:49:35.000000000 +0200 > +++ linux-2.6/drivers/scsi/scsi_transport_sas.c 2005-10-19 19:50:55.000000000 +0200 > @@ -266,6 +266,9 @@ > struct sas_internal *i = to_sas_internal(shost->transportt); \ > int error; \ > \ > + if (!phy->local_attached) \ > + return -EINVAL; \ > + \ > error = i->f->get_linkerrors(phy); \ > if (error) \ > return error; \ > - > : send the line "unsubscribe linux-scsi" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- http://linux.adaptec.com/sas/ http://www.adaptec.com/sas/ - : send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html