unsigned long action, void *data)
 {
        struct device *dev = data;
-       struct scsi_device *sdev = to_scsi_device(dev);
+       struct scsi_device *sdev;
        struct scsi_dh_data *scsi_dh_data;
        struct clariion_dh_data *h;
        int i, found = 0;
        unsigned long flags;
 
+       if (!scsi_is_sdev_device(dev))
+               return 0;
+
+       sdev = to_scsi_device(dev);
+
        if (action == BUS_NOTIFY_ADD_DEVICE) {
                for (i = 0; clariion_dev_list[i].vendor; i++) {
                        if (!strncmp(sdev->vendor, clariion_dev_list[i].vendor,
 
                            unsigned long action, void *data)
 {
        struct device *dev = data;
-       struct scsi_device *sdev = to_scsi_device(dev);
+       struct scsi_device *sdev;
        struct scsi_dh_data *scsi_dh_data;
        int i, found = 0;
        unsigned long flags;
 
+       if (!scsi_is_sdev_device(dev))
+               return 0;
+
+       sdev = to_scsi_device(dev);
+
        if (action == BUS_NOTIFY_ADD_DEVICE) {
                for (i = 0; hp_sw_dh_data_list[i].vendor; i++) {
                        if (!strncmp(sdev->vendor, hp_sw_dh_data_list[i].vendor,
 
                            unsigned long action, void *data)
 {
        struct device *dev = data;
-       struct scsi_device *sdev = to_scsi_device(dev);
+       struct scsi_device *sdev;
        struct scsi_dh_data *scsi_dh_data;
        struct rdac_dh_data *h;
        int i, found = 0;
        unsigned long flags;
 
+       if (!scsi_is_sdev_device(dev))
+               return 0;
+
+       sdev = to_scsi_device(dev);
+
        if (action == BUS_NOTIFY_ADD_DEVICE) {
                for (i = 0; rdac_dev_list[i].vendor; i++) {
                        if (!strncmp(sdev->vendor, rdac_dev_list[i].vendor,