diff options
author | Moger, Babu <Babu.Moger@netapp.com> | 2011-12-01 15:01:40 -0500 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2011-12-15 01:55:00 -0500 |
commit | bee89eae8de143b1d9f82ab7ab6d9daef8e44760 (patch) | |
tree | 4453ff1203fdf7c187527549d876b9c638863946 /drivers/scsi/device_handler/scsi_dh_rdac.c | |
parent | a315969e8d699682adf449813de84b7f2358f64d (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.c | 19 |
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 | ||
823 | static 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 | |||
823 | static int rdac_bus_attach(struct scsi_device *sdev); | 841 | static int rdac_bus_attach(struct scsi_device *sdev); |
824 | static void rdac_bus_detach(struct scsi_device *sdev); | 842 | static 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 | ||
837 | static int rdac_bus_attach(struct scsi_device *sdev) | 856 | static int rdac_bus_attach(struct scsi_device *sdev) |