linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / ide / ide-tape.c
index f04791a..0101d0d 100644 (file)
 #include <linux/timer.h>
 #include <linux/mm.h>
 #include <linux/interrupt.h>
-#include <linux/jiffies.h>
 #include <linux/major.h>
 #include <linux/devfs_fs_kernel.h>
 #include <linux/errno.h>
 #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>
@@ -1013,7 +1011,7 @@ typedef struct ide_tape_obj {
          int debug_level; 
 } idetape_tape_t;
 
-static DEFINE_MUTEX(idetape_ref_mutex);
+static DECLARE_MUTEX(idetape_ref_sem);
 
 static struct class *idetape_sysfs_class;
 
@@ -1026,11 +1024,11 @@ static struct ide_tape_obj *ide_tape_get(struct gendisk *disk)
 {
        struct ide_tape_obj *tape = NULL;
 
-       mutex_lock(&idetape_ref_mutex);
+       down(&idetape_ref_sem);
        tape = ide_tape_g(disk);
        if (tape)
                kref_get(&tape->kref);
-       mutex_unlock(&idetape_ref_mutex);
+       up(&idetape_ref_sem);
        return tape;
 }
 
@@ -1038,9 +1036,9 @@ static void ide_tape_release(struct kref *);
 
 static void ide_tape_put(struct ide_tape_obj *tape)
 {
-       mutex_lock(&idetape_ref_mutex);
+       down(&idetape_ref_sem);
        kref_put(&tape->kref, ide_tape_release);
-       mutex_unlock(&idetape_ref_mutex);
+       up(&idetape_ref_sem);
 }
 
 /*
@@ -1292,11 +1290,11 @@ static struct ide_tape_obj *ide_tape_chrdev_get(unsigned int i)
 {
        struct ide_tape_obj *tape = NULL;
 
-       mutex_lock(&idetape_ref_mutex);
+       down(&idetape_ref_sem);
        tape = idetape_devs[i];
        if (tape)
                kref_get(&tape->kref);
-       mutex_unlock(&idetape_ref_mutex);
+       up(&idetape_ref_sem);
        return tape;
 }
 
@@ -2337,7 +2335,7 @@ static ide_startstop_t idetape_rw_callback (ide_drive_t *drive)
        }
        if (time_after(jiffies, tape->insert_time))
                tape->insert_speed = tape->insert_size / 1024 * HZ / (jiffies - tape->insert_time);
-       if (time_after_eq(jiffies, tape->avg_time + HZ)) {
+       if (jiffies - tape->avg_time >= HZ) {
                tape->avg_speed = tape->avg_size * HZ / (jiffies - tape->avg_time) / 1024;
                tape->avg_size = 0;
                tape->avg_time = jiffies;
@@ -2498,7 +2496,7 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive,
                        } else {
                                return ide_do_reset(drive);
                        }
-               } else if (time_after(jiffies, tape->dsc_polling_start + IDETAPE_DSC_MA_THRESHOLD))
+               } else if (jiffies - tape->dsc_polling_start > IDETAPE_DSC_MA_THRESHOLD)
                        tape->dsc_polling_frequency = IDETAPE_DSC_MA_SLOW;
                idetape_postpone_request(drive);
                return ide_stopped;
@@ -4872,11 +4870,11 @@ static int ide_tape_probe(ide_drive_t *drive)
 
        drive->driver_data = tape;
 
-       mutex_lock(&idetape_ref_mutex);
+       down(&idetape_ref_sem);
        for (minor = 0; idetape_devs[minor]; minor++)
                ;
        idetape_devs[minor] = tape;
-       mutex_unlock(&idetape_ref_mutex);
+       up(&idetape_ref_sem);
 
        idetape_setup(drive, tape, minor);