]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/ide/ide-tape.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/aoe-2.6
[linux-2.6-omap-h63xx.git] / drivers / ide / ide-tape.c
index 7d7944ed4158b89b88e73d6fb4220fdb1111609c..ebc59064b4752a6fd12f511cece004c8e8dae889 100644 (file)
 #include <linux/smp_lock.h>
 #include <linux/completion.h>
 #include <linux/bitops.h>
+#include <linux/mutex.h>
 
 #include <asm/byteorder.h>
 #include <asm/irq.h>
@@ -1011,7 +1012,7 @@ typedef struct ide_tape_obj {
          int debug_level; 
 } idetape_tape_t;
 
-static DECLARE_MUTEX(idetape_ref_sem);
+static DEFINE_MUTEX(idetape_ref_mutex);
 
 static struct class *idetape_sysfs_class;
 
@@ -1024,11 +1025,11 @@ static struct ide_tape_obj *ide_tape_get(struct gendisk *disk)
 {
        struct ide_tape_obj *tape = NULL;
 
-       down(&idetape_ref_sem);
+       mutex_lock(&idetape_ref_mutex);
        tape = ide_tape_g(disk);
        if (tape)
                kref_get(&tape->kref);
-       up(&idetape_ref_sem);
+       mutex_unlock(&idetape_ref_mutex);
        return tape;
 }
 
@@ -1036,9 +1037,9 @@ static void ide_tape_release(struct kref *);
 
 static void ide_tape_put(struct ide_tape_obj *tape)
 {
-       down(&idetape_ref_sem);
+       mutex_lock(&idetape_ref_mutex);
        kref_put(&tape->kref, ide_tape_release);
-       up(&idetape_ref_sem);
+       mutex_unlock(&idetape_ref_mutex);
 }
 
 /*
@@ -1290,11 +1291,11 @@ static struct ide_tape_obj *ide_tape_chrdev_get(unsigned int i)
 {
        struct ide_tape_obj *tape = NULL;
 
-       down(&idetape_ref_sem);
+       mutex_lock(&idetape_ref_mutex);
        tape = idetape_devs[i];
        if (tape)
                kref_get(&tape->kref);
-       up(&idetape_ref_sem);
+       mutex_unlock(&idetape_ref_mutex);
        return tape;
 }
 
@@ -4682,9 +4683,8 @@ static void idetape_setup (ide_drive_t *drive, idetape_tape_t *tape, int minor)
        idetape_add_settings(drive);
 }
 
-static int ide_tape_remove(struct device *dev)
+static void ide_tape_remove(ide_drive_t *drive)
 {
-       ide_drive_t *drive = to_ide_device(dev);
        idetape_tape_t *tape = drive->driver_data;
 
        ide_unregister_subdriver(drive, tape->driver);
@@ -4692,8 +4692,6 @@ static int ide_tape_remove(struct device *dev)
        ide_unregister_region(tape->disk);
 
        ide_tape_put(tape);
-
-       return 0;
 }
 
 static void ide_tape_release(struct kref *kref)
@@ -4745,16 +4743,16 @@ static ide_proc_entry_t idetape_proc[] = {
 
 #endif
 
-static int ide_tape_probe(struct device *);
+static int ide_tape_probe(ide_drive_t *);
 
 static ide_driver_t idetape_driver = {
        .gen_driver = {
                .owner          = THIS_MODULE,
                .name           = "ide-tape",
                .bus            = &ide_bus_type,
-               .probe          = ide_tape_probe,
-               .remove         = ide_tape_remove,
        },
+       .probe                  = ide_tape_probe,
+       .remove                 = ide_tape_remove,
        .version                = IDETAPE_VERSION,
        .media                  = ide_tape,
        .supports_dsc_overlap   = 1,
@@ -4825,9 +4823,8 @@ static struct block_device_operations idetape_block_ops = {
        .ioctl          = idetape_ioctl,
 };
 
-static int ide_tape_probe(struct device *dev)
+static int ide_tape_probe(ide_drive_t *drive)
 {
-       ide_drive_t *drive = to_ide_device(dev);
        idetape_tape_t *tape;
        struct gendisk *g;
        int minor;
@@ -4874,18 +4871,18 @@ static int ide_tape_probe(struct device *dev)
 
        drive->driver_data = tape;
 
-       down(&idetape_ref_sem);
+       mutex_lock(&idetape_ref_mutex);
        for (minor = 0; idetape_devs[minor]; minor++)
                ;
        idetape_devs[minor] = tape;
-       up(&idetape_ref_sem);
+       mutex_unlock(&idetape_ref_mutex);
 
        idetape_setup(drive, tape, minor);
 
        class_device_create(idetape_sysfs_class, NULL,
-                       MKDEV(IDETAPE_MAJOR, minor), dev, "%s", tape->name);
+                       MKDEV(IDETAPE_MAJOR, minor), &drive->gendev, "%s", tape->name);
        class_device_create(idetape_sysfs_class, NULL,
-                       MKDEV(IDETAPE_MAJOR, minor + 128), dev, "n%s", tape->name);
+                       MKDEV(IDETAPE_MAJOR, minor + 128), &drive->gendev, "n%s", tape->name);
 
        devfs_mk_cdev(MKDEV(HWIF(drive)->major, minor),
                        S_IFCHR | S_IRUGO | S_IWUGO,
@@ -4947,6 +4944,7 @@ out:
        return error;
 }
 
+MODULE_ALIAS("ide:*m-tape*");
 module_init(idetape_init);
 module_exit(idetape_exit);
 MODULE_ALIAS_CHARDEV_MAJOR(IDETAPE_MAJOR);