Browse Source

[SCSI] scsi_transport_sas; fix user_scan

the user_scan() callback currently has the potential to identify the
wrong device in the presence of expanders.  This is because it finds
the first device with a matching target_id, which might be an
expander.  Fix this by making it look specifically for end devices.

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
James Bottomley 19 năm trước cách đây
mục cha
commit
6d99a3f372
1 tập tin đã thay đổi với 2 bổ sung1 xóa
  1. 2 1
      drivers/scsi/scsi_transport_sas.c

+ 2 - 1
drivers/scsi/scsi_transport_sas.c

@@ -955,7 +955,8 @@ static int sas_user_scan(struct Scsi_Host *shost, uint channel,
 	list_for_each_entry(rphy, &sas_host->rphy_list, list) {
 	list_for_each_entry(rphy, &sas_host->rphy_list, list) {
 		struct sas_phy *parent = dev_to_phy(rphy->dev.parent);
 		struct sas_phy *parent = dev_to_phy(rphy->dev.parent);
 
 
-		if (rphy->scsi_target_id == -1)
+		if (rphy->identify.device_type != SAS_END_DEVICE ||
+		    rphy->scsi_target_id == -1)
 			continue;
 			continue;
 
 
 		if ((channel == SCAN_WILD_CARD || channel == parent->port_identifier) &&
 		if ((channel == SCAN_WILD_CARD || channel == parent->port_identifier) &&