* mainly associated with tapes and returned SUCCESS.
Index: linux-2.6.24-rc8/drivers/scsi/scsi_sysfs.c
===================================================================
--- linux-2.6.24-rc8.orig/drivers/scsi/scsi_sysfs.c
+++ linux-2.6.24-rc8/drivers/scsi/scsi_sysfs.c
@@ -951,6 +951,49 @@ int scsi_register_interface(struct class
}
EXPORT_SYMBOL(scsi_register_interface);
+static int scsi_dh_notifier_add(struct device *dev, void *data)
+{
+ struct scsi_device_handler *sdev_dh = data;
+
+ sdev_dh->nb.notifier_call(&sdev_dh->nb, BUS_NOTIFY_ADD_DEVICE, dev);
+
+ return 0;
+}
+
+int scsi_register_device_handler(struct scsi_device_handler *sdev_dh)
+{
+ int ret;
+
+ ret = bus_register_notifier(&scsi_bus_type, &sdev_dh->nb);
+
+ bus_for_each_dev(&scsi_bus_type, NULL, sdev_dh, scsi_dh_notifier_add);
+
+ return ret;
+}
+EXPORT_SYMBOL(scsi_register_device_handler);
+
+static int scsi_dh_notifier_remove(struct device *dev, void *data)
+{
+ struct scsi_device_handler *sdev_dh = data;
+
+ sdev_dh->nb.notifier_call(&sdev_dh->nb, BUS_NOTIFY_DEL_DEVICE, dev);
+
+ return 0;
+}
+
+int scsi_unregister_device_handler(struct scsi_device_handler *sdev_dh)
+{
+ int ret;
+
+ ret = bus_unregister_notifier(&scsi_bus_type, &sdev_dh->nb);
+
+ bus_for_each_dev(&scsi_bus_type, NULL, sdev_dh,
+ scsi_dh_notifier_remove);
+
+ return ret;
+}
+EXPORT_SYMBOL(scsi_unregister_device_handler);
+