From 42b25258f98c287e70e9e78453dce05282ea3a43 Mon Sep 17 00:00:00 2001 From: Vladislav Bolkhovitin Date: Fri, 23 Oct 2009 16:52:26 +0000 Subject: [PATCH] Major numbers cleanup git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@1258 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scst/include/scst.h | 2 ++ scst/src/dev_handlers/scst_user.c | 30 +++++++++++++++--------------- scst/src/scst_main.c | 7 +++++++ scst/src/scst_priv.h | 2 ++ 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/scst/include/scst.h b/scst/include/scst.h index 71d881d2b..7917c8d79 100644 --- a/scst/include/scst.h +++ b/scst/include/scst.h @@ -1719,8 +1719,10 @@ struct scst_device { /* Used for storage of dev handler private stuff */ void *dh_priv; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) /* Used to translate SCSI's cmd to SCST's cmd */ struct gendisk *rq_disk; +#endif /* Corresponding real SCSI device, could be NULL for virtual devices */ struct scsi_device *scsi_dev; diff --git a/scst/src/dev_handlers/scst_user.c b/scst/src/dev_handlers/scst_user.c index 75a39030a..ec05a31b1 100644 --- a/scst/src/dev_handlers/scst_user.c +++ b/scst/src/dev_handlers/scst_user.c @@ -35,7 +35,6 @@ for details." #endif -#define DEV_USER_MAJOR 237 #define DEV_USER_CMD_HASH_ORDER 6 #define DEV_USER_ATTACH_TIMEOUT (5*HZ) @@ -232,6 +231,8 @@ static struct scst_dev_type dev_user_devtype = { #endif }; +static int dev_user_major; + static struct class *dev_user_sysfs_class; static DEFINE_SPINLOCK(dev_list_lock); @@ -3616,23 +3617,23 @@ static int __init init_scst_user(void) #endif } - res = register_chrdev(DEV_USER_MAJOR, DEV_USER_NAME, &dev_user_fops); - if (res) { - PRINT_ERROR("Unable to get major %d for SCSI tapes", - DEV_USER_MAJOR); + dev_user_major = register_chrdev(0, DEV_USER_NAME, &dev_user_fops); + if (dev_user_major < 0) { + PRINT_ERROR("register_chrdev() failed: %d", res); + res = dev_user_major; goto out_class; } #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 21) class_member = class_device_create(dev_user_sysfs_class, NULL, - MKDEV(DEV_USER_MAJOR, 0), NULL, DEV_USER_NAME); + MKDEV(dev_user_major, 0), NULL, DEV_USER_NAME); if (IS_ERR(class_member)) { res = PTR_ERR(class_member); goto out_chrdev; } #else dev = device_create(dev_user_sysfs_class, NULL, - MKDEV(DEV_USER_MAJOR, 0), + MKDEV(dev_user_major, 0), #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) NULL, #endif @@ -3657,13 +3658,13 @@ out: out_dev: #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 21) - class_device_destroy(dev_user_sysfs_class, MKDEV(DEV_USER_MAJOR, 0)); + class_device_destroy(dev_user_sysfs_class, MKDEV(dev_user_major, 0)); #else - device_destroy(dev_user_sysfs_class, MKDEV(DEV_USER_MAJOR, 0)); + device_destroy(dev_user_sysfs_class, MKDEV(dev_user_major, 0)); #endif out_chrdev: - unregister_chrdev(DEV_USER_MAJOR, DEV_USER_NAME); + unregister_chrdev(dev_user_major, DEV_USER_NAME); out_class: class_destroy(dev_user_sysfs_class); @@ -3694,11 +3695,11 @@ static void __exit exit_scst_user(void) if (rc < 0) TRACE_MGMT_DBG("kthread_stop() failed: %d", rc); - unregister_chrdev(DEV_USER_MAJOR, DEV_USER_NAME); + unregister_chrdev(dev_user_major, DEV_USER_NAME); #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 21) - class_device_destroy(dev_user_sysfs_class, MKDEV(DEV_USER_MAJOR, 0)); + class_device_destroy(dev_user_sysfs_class, MKDEV(dev_user_major, 0)); #else - device_destroy(dev_user_sysfs_class, MKDEV(DEV_USER_MAJOR, 0)); + device_destroy(dev_user_sysfs_class, MKDEV(dev_user_major, 0)); #endif class_destroy(dev_user_sysfs_class); @@ -3719,6 +3720,5 @@ module_exit(exit_scst_user); MODULE_AUTHOR("Vladislav Bolkhovitin"); MODULE_LICENSE("GPL"); -MODULE_DESCRIPTION("Virtual user space device handler for SCST"); +MODULE_DESCRIPTION("User space device handler for SCST"); MODULE_VERSION(SCST_VERSION_STRING); -MODULE_ALIAS_CHARDEV_MAJOR(DEV_USER_MAJOR); diff --git a/scst/src/scst_main.c b/scst/src/scst_main.c index 9a6eb7ddd..515c7a1c1 100644 --- a/scst/src/scst_main.c +++ b/scst/src/scst_main.c @@ -749,6 +749,7 @@ static int scst_register_device(struct scsi_device *scsidp) snprintf(dev->virt_name, 50, "%d:%d:%d:%d", scsidp->host->host_no, scsidp->channel, scsidp->id, scsidp->lun); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) dev->rq_disk = alloc_disk(1); if (dev->rq_disk == NULL) { PRINT_ERROR("Unable to alloc disk object for device %s", @@ -758,6 +759,7 @@ static int scst_register_device(struct scsi_device *scsidp) goto out_free_dev; } dev->rq_disk->major = SCST_MAJOR; +#endif dev->scsi_dev = scsidp; @@ -798,7 +800,9 @@ out_err: out_free: list_del(&dev->dev_list_entry); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) put_disk(dev->rq_disk); +#endif out_free_dev: scst_device_sysfs_put(dev); @@ -836,7 +840,10 @@ static void scst_unregister_device(struct scsi_device *scsidp) scst_assign_dev_handler(dev, &scst_null_devtype); +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) put_disk(dev->rq_disk); +#endif + scst_device_sysfs_put(dev); PRINT_INFO("Detached from scsi%d, channel %d, id %d, lun %d, type %d", diff --git a/scst/src/scst_priv.h b/scst/src/scst_priv.h index 9c92ea453..d2bd953ea 100644 --- a/scst/src/scst_priv.h +++ b/scst/src/scst_priv.h @@ -39,7 +39,9 @@ void sgv_pool_destroy(struct sgv_pool *pool); #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18) #define SCST_MAJOR 177 +#endif #define TRACE_RTRY 0x80000000 #define TRACE_SCSI_SERIALIZING 0x40000000