diff options
-rw-r--r-- | drivers/message/fusion/mptsas.c | 11 | ||||
-rw-r--r-- | drivers/scsi/scsi_transport_sas.c | 10 | ||||
-rw-r--r-- | include/scsi/scsi_transport_sas.h | 5 |
3 files changed, 12 insertions, 14 deletions
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c index dfdd1e445768..b752a479f6db 100644 --- a/drivers/message/fusion/mptsas.c +++ b/drivers/message/fusion/mptsas.c | |||
@@ -852,6 +852,10 @@ static int mptsas_get_linkerrors(struct sas_phy *phy) | |||
852 | dma_addr_t dma_handle; | 852 | dma_addr_t dma_handle; |
853 | int error; | 853 | int error; |
854 | 854 | ||
855 | /* FIXME: only have link errors on local phys */ | ||
856 | if (!scsi_is_sas_phy_local(phy)) | ||
857 | return -EINVAL; | ||
858 | |||
855 | hdr.PageVersion = MPI_SASPHY1_PAGEVERSION; | 859 | hdr.PageVersion = MPI_SASPHY1_PAGEVERSION; |
856 | hdr.ExtPageLength = 0; | 860 | hdr.ExtPageLength = 0; |
857 | hdr.PageNumber = 1 /* page number 1*/; | 861 | hdr.PageNumber = 1 /* page number 1*/; |
@@ -924,6 +928,10 @@ static int mptsas_phy_reset(struct sas_phy *phy, int hard_reset) | |||
924 | unsigned long timeleft; | 928 | unsigned long timeleft; |
925 | int error = -ERESTARTSYS; | 929 | int error = -ERESTARTSYS; |
926 | 930 | ||
931 | /* FIXME: fusion doesn't allow non-local phy reset */ | ||
932 | if (!scsi_is_sas_phy_local(phy)) | ||
933 | return -EINVAL; | ||
934 | |||
927 | /* not implemented for expanders */ | 935 | /* not implemented for expanders */ |
928 | if (phy->identify.target_port_protocols & SAS_PROTOCOL_SMP) | 936 | if (phy->identify.target_port_protocols & SAS_PROTOCOL_SMP) |
929 | return -ENXIO; | 937 | return -ENXIO; |
@@ -1570,9 +1578,6 @@ static int mptsas_probe_one_phy(struct device *dev, | |||
1570 | 1578 | ||
1571 | if (!phy_info->phy) { | 1579 | if (!phy_info->phy) { |
1572 | 1580 | ||
1573 | if (local) | ||
1574 | phy->local_attached = 1; | ||
1575 | |||
1576 | error = sas_phy_add(phy); | 1581 | error = sas_phy_add(phy); |
1577 | if (error) { | 1582 | if (error) { |
1578 | sas_phy_free(phy); | 1583 | sas_phy_free(phy); |
diff --git a/drivers/scsi/scsi_transport_sas.c b/drivers/scsi/scsi_transport_sas.c index 5a625c3fddae..d518c1207fb4 100644 --- a/drivers/scsi/scsi_transport_sas.c +++ b/drivers/scsi/scsi_transport_sas.c | |||
@@ -266,9 +266,6 @@ show_sas_phy_##field(struct class_device *cdev, char *buf) \ | |||
266 | struct sas_internal *i = to_sas_internal(shost->transportt); \ | 266 | struct sas_internal *i = to_sas_internal(shost->transportt); \ |
267 | int error; \ | 267 | int error; \ |
268 | \ | 268 | \ |
269 | if (!phy->local_attached) \ | ||
270 | return -EINVAL; \ | ||
271 | \ | ||
272 | error = i->f->get_linkerrors ? i->f->get_linkerrors(phy) : 0; \ | 269 | error = i->f->get_linkerrors ? i->f->get_linkerrors(phy) : 0; \ |
273 | if (error) \ | 270 | if (error) \ |
274 | return error; \ | 271 | return error; \ |
@@ -299,9 +296,6 @@ static ssize_t do_sas_phy_reset(struct class_device *cdev, | |||
299 | struct sas_internal *i = to_sas_internal(shost->transportt); | 296 | struct sas_internal *i = to_sas_internal(shost->transportt); |
300 | int error; | 297 | int error; |
301 | 298 | ||
302 | if (!phy->local_attached) | ||
303 | return -EINVAL; | ||
304 | |||
305 | error = i->f->phy_reset(phy, hard_reset); | 299 | error = i->f->phy_reset(phy, hard_reset); |
306 | if (error) | 300 | if (error) |
307 | return error; | 301 | return error; |
@@ -849,7 +843,7 @@ show_sas_rphy_enclosure_identifier(struct class_device *cdev, char *buf) | |||
849 | * Only devices behind an expander are supported, because the | 843 | * Only devices behind an expander are supported, because the |
850 | * enclosure identifier is a SMP feature. | 844 | * enclosure identifier is a SMP feature. |
851 | */ | 845 | */ |
852 | if (phy->local_attached) | 846 | if (scsi_is_sas_phy_local(phy)) |
853 | return -EINVAL; | 847 | return -EINVAL; |
854 | 848 | ||
855 | error = i->f->get_enclosure_identifier(rphy, &identifier); | 849 | error = i->f->get_enclosure_identifier(rphy, &identifier); |
@@ -870,7 +864,7 @@ show_sas_rphy_bay_identifier(struct class_device *cdev, char *buf) | |||
870 | struct sas_internal *i = to_sas_internal(shost->transportt); | 864 | struct sas_internal *i = to_sas_internal(shost->transportt); |
871 | int val; | 865 | int val; |
872 | 866 | ||
873 | if (phy->local_attached) | 867 | if (scsi_is_sas_phy_local(phy)) |
874 | return -EINVAL; | 868 | return -EINVAL; |
875 | 869 | ||
876 | val = i->f->get_bay_identifier(rphy); | 870 | val = i->f->get_bay_identifier(rphy); |
diff --git a/include/scsi/scsi_transport_sas.h b/include/scsi/scsi_transport_sas.h index 6cc2314098cf..eeb2200de855 100644 --- a/include/scsi/scsi_transport_sas.h +++ b/include/scsi/scsi_transport_sas.h | |||
@@ -57,9 +57,6 @@ struct sas_phy { | |||
57 | enum sas_linkrate maximum_linkrate_hw; | 57 | enum sas_linkrate maximum_linkrate_hw; |
58 | enum sas_linkrate maximum_linkrate; | 58 | enum sas_linkrate maximum_linkrate; |
59 | 59 | ||
60 | /* internal state */ | ||
61 | unsigned int local_attached : 1; | ||
62 | |||
63 | /* link error statistics */ | 60 | /* link error statistics */ |
64 | u32 invalid_dword_count; | 61 | u32 invalid_dword_count; |
65 | u32 running_disparity_error_count; | 62 | u32 running_disparity_error_count; |
@@ -196,4 +193,6 @@ scsi_is_sas_expander_device(struct device *dev) | |||
196 | rphy->identify.device_type == SAS_EDGE_EXPANDER_DEVICE; | 193 | rphy->identify.device_type == SAS_EDGE_EXPANDER_DEVICE; |
197 | } | 194 | } |
198 | 195 | ||
196 | #define scsi_is_sas_phy_local(phy) scsi_is_host_device((phy)->dev.parent) | ||
197 | |||
199 | #endif /* SCSI_TRANSPORT_SAS_H */ | 198 | #endif /* SCSI_TRANSPORT_SAS_H */ |