EXPORT_SYMBOL(scsi_logging_level);
#endif
+/* NB: These are exposed through /proc/scsi/scsi and form part of the ABI.
+ * You may not alter any existing entry (although adding new ones is
+ * encouraged once assigned by ANSI/INCITS T10
+ */
static const char *const scsi_device_types[] = {
- "Direct access ",
- "Sequential access",
+ "Direct-Access ",
+ "Sequential-Access",
"Printer ",
"Processor ",
"WORM ",
- "CD/DVD ",
+ "CD-ROM ",
"Scanner ",
- "Optical memory ",
- "Media changer ",
+ "Optical Device ",
+ "Medium Changer ",
"Communications ",
"ASC IT8 ",
"ASC IT8 ",
"RAID ",
"Enclosure ",
- "Direct access RBC",
+ "Direct-Access-RBC",
"Optical card ",
"Bridge controller",
"Object storage ",
*/
void scsi_device_put(struct scsi_device *sdev)
{
+ struct module *module = sdev->host->hostt->module;
+
+#ifdef CONFIG_MODULE_UNLOAD
/* The module refcount will be zero if scsi_device_get()
* was called from a module removal routine */
- if (likely(module_refcount(sdev->host->hostt->module) != 0))
- module_put(sdev->host->hostt->module);
+ if (module && module_refcount(module) != 0)
+ module_put(module);
+#endif
put_device(&sdev->sdev_gendev);
}
EXPORT_SYMBOL(scsi_device_put);
for_each_possible_cpu(i)
INIT_LIST_HEAD(&per_cpu(scsi_done_q, i));
+ scsi_netlink_init();
+
printk(KERN_NOTICE "SCSI subsystem initialized\n");
return 0;
static void __exit exit_scsi(void)
{
+ scsi_netlink_exit();
scsi_sysfs_unregister();
scsi_exit_sysctl();
scsi_exit_hosts();