aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_transport_spi.c
diff options
context:
space:
mode:
authorJames Bottomley <James.Bottomley@steeleye.com>2005-08-14 15:34:06 -0400
committerJames Bottomley <jejb@mulgrave.(none)>2005-08-14 15:42:25 -0400
commit10c1b88987d618f4f89c10e11e574c76de73b5e7 (patch)
tree21b45648425c43f6a392afc0da800524608c7caf /drivers/scsi/scsi_transport_spi.c
parent3a4f5c60dbe1978580ea03c1aff353d1e63d1638 (diff)
[SCSI] add ability to deny binding to SPI transport class
This patch is necessary if we begin exposing underlying physical disks (which can attach to the SPI transport class) of the hardware RAID cards, since we don't want any SPI parameters binding to the RAID devices. Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/scsi_transport_spi.c')
-rw-r--r--drivers/scsi/scsi_transport_spi.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c
index e7b9570c818b..02134fce2174 100644
--- a/drivers/scsi/scsi_transport_spi.c
+++ b/drivers/scsi/scsi_transport_spi.c
@@ -1082,6 +1082,7 @@ static int spi_device_match(struct attribute_container *cont,
1082{ 1082{
1083 struct scsi_device *sdev; 1083 struct scsi_device *sdev;
1084 struct Scsi_Host *shost; 1084 struct Scsi_Host *shost;
1085 struct spi_internal *i;
1085 1086
1086 if (!scsi_is_sdev_device(dev)) 1087 if (!scsi_is_sdev_device(dev))
1087 return 0; 1088 return 0;
@@ -1094,6 +1095,9 @@ static int spi_device_match(struct attribute_container *cont,
1094 /* Note: this class has no device attributes, so it has 1095 /* Note: this class has no device attributes, so it has
1095 * no per-HBA allocation and thus we don't need to distinguish 1096 * no per-HBA allocation and thus we don't need to distinguish
1096 * the attribute containers for the device */ 1097 * the attribute containers for the device */
1098 i = to_spi_internal(shost->transportt);
1099 if (i->f->deny_binding && i->f->deny_binding(sdev->sdev_target))
1100 return 0;
1097 return 1; 1101 return 1;
1098} 1102}
1099 1103
@@ -1101,6 +1105,7 @@ static int spi_target_match(struct attribute_container *cont,
1101 struct device *dev) 1105 struct device *dev)
1102{ 1106{
1103 struct Scsi_Host *shost; 1107 struct Scsi_Host *shost;
1108 struct scsi_target *starget;
1104 struct spi_internal *i; 1109 struct spi_internal *i;
1105 1110
1106 if (!scsi_is_target_device(dev)) 1111 if (!scsi_is_target_device(dev))
@@ -1112,7 +1117,11 @@ static int spi_target_match(struct attribute_container *cont,
1112 return 0; 1117 return 0;
1113 1118
1114 i = to_spi_internal(shost->transportt); 1119 i = to_spi_internal(shost->transportt);
1115 1120 starget = to_scsi_target(dev);
1121
1122 if (i->f->deny_binding && i->f->deny_binding(starget))
1123 return 0;
1124
1116 return &i->t.target_attrs.ac == cont; 1125 return &i->t.target_attrs.ac == cont;
1117} 1126}
1118 1127