[SCSI] scsi_transport_sas; fix user_scan
authorJames Bottomley <James.Bottomley@steeleye.com>
Fri, 19 May 2006 15:49:37 +0000 (10:49 -0500)
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>
Sat, 20 May 2006 14:01:21 +0000 (09:01 -0500)
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>
drivers/scsi/scsi_transport_sas.c

index 8b6d65e21bae3a23ac362d65ac9b95d57732b6f3..8126c395de164d6c74db3bb626e9a139b8b16e35 100644 (file)
@@ -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) {
                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;
 
                if ((channel == SCAN_WILD_CARD || channel == parent->port_identifier) &&