aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/device_handler/scsi_dh_rdac.c
diff options
context:
space:
mode:
authorMoger, Babu <Babu.Moger@netapp.com>2011-12-01 15:01:40 -0500
committerJames Bottomley <JBottomley@Parallels.com>2011-12-15 01:55:00 -0500
commitbee89eae8de143b1d9f82ab7ab6d9daef8e44760 (patch)
tree4453ff1203fdf7c187527549d876b9c638863946 /drivers/scsi/device_handler/scsi_dh_rdac.c
parenta315969e8d699682adf449813de84b7f2358f64d (diff)
[SCSI] scsi_dh_rdac: Adding the match function for rdac device handler
This patch introduces the match function for rdac device handler. Without this, sometimes handler attach fails during the device_add. Included check for TPGS bit before proceeding further. The match function was introduced by commit 6c3633d08acf514e2e89aa95d2346ce9d64d719a Signed-off-by: Babu Moger <babu.moger@netapp.com> Acked-by: Hannes Reinecke <hare@suse.de> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/device_handler/scsi_dh_rdac.c')
-rw-r--r--drivers/scsi/device_handler/scsi_dh_rdac.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/scsi/device_handler/scsi_dh_rdac.c b/drivers/scsi/device_handler/scsi_dh_rdac.c
index 1d3127920063..841ebf4a6788 100644
--- a/drivers/scsi/device_handler/scsi_dh_rdac.c
+++ b/drivers/scsi/device_handler/scsi_dh_rdac.c
@@ -820,6 +820,24 @@ static const struct scsi_dh_devlist rdac_dev_list[] = {
820 {NULL, NULL}, 820 {NULL, NULL},
821}; 821};
822 822
823static bool rdac_match(struct scsi_device *sdev)
824{
825 int i;
826
827 if (scsi_device_tpgs(sdev))
828 return false;
829
830 for (i = 0; rdac_dev_list[i].vendor; i++) {
831 if (!strncmp(sdev->vendor, rdac_dev_list[i].vendor,
832 strlen(rdac_dev_list[i].vendor)) &&
833 !strncmp(sdev->model, rdac_dev_list[i].model,
834 strlen(rdac_dev_list[i].model))) {
835 return true;
836 }
837 }
838 return false;
839}
840
823static int rdac_bus_attach(struct scsi_device *sdev); 841static int rdac_bus_attach(struct scsi_device *sdev);
824static void rdac_bus_detach(struct scsi_device *sdev); 842static void rdac_bus_detach(struct scsi_device *sdev);
825 843
@@ -832,6 +850,7 @@ static struct scsi_device_handler rdac_dh = {
832 .attach = rdac_bus_attach, 850 .attach = rdac_bus_attach,
833 .detach = rdac_bus_detach, 851 .detach = rdac_bus_detach,
834 .activate = rdac_activate, 852 .activate = rdac_activate,
853 .match = rdac_match,
835}; 854};
836 855
837static int rdac_bus_attach(struct scsi_device *sdev) 856static int rdac_bus_attach(struct scsi_device *sdev)