diff options
Diffstat (limited to 'drivers/block/paride/pt.c')
-rw-r--r-- | drivers/block/paride/pt.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/block/paride/pt.c b/drivers/block/paride/pt.c index bc5825fdeaab..e4dda282e0a6 100644 --- a/drivers/block/paride/pt.c +++ b/drivers/block/paride/pt.c | |||
@@ -146,7 +146,7 @@ static int (*drives[4])[6] = {&drive0, &drive1, &drive2, &drive3}; | |||
146 | #include <linux/mtio.h> | 146 | #include <linux/mtio.h> |
147 | #include <linux/device.h> | 147 | #include <linux/device.h> |
148 | #include <linux/sched.h> /* current, TASK_*, schedule_timeout() */ | 148 | #include <linux/sched.h> /* current, TASK_*, schedule_timeout() */ |
149 | #include <linux/smp_lock.h> | 149 | #include <linux/mutex.h> |
150 | 150 | ||
151 | #include <asm/uaccess.h> | 151 | #include <asm/uaccess.h> |
152 | 152 | ||
@@ -189,6 +189,7 @@ module_param_array(drive3, int, NULL, 0); | |||
189 | #define ATAPI_MODE_SENSE 0x1a | 189 | #define ATAPI_MODE_SENSE 0x1a |
190 | #define ATAPI_LOG_SENSE 0x4d | 190 | #define ATAPI_LOG_SENSE 0x4d |
191 | 191 | ||
192 | static DEFINE_MUTEX(pt_mutex); | ||
192 | static int pt_open(struct inode *inode, struct file *file); | 193 | static int pt_open(struct inode *inode, struct file *file); |
193 | static long pt_ioctl(struct file *file, unsigned int cmd, unsigned long arg); | 194 | static long pt_ioctl(struct file *file, unsigned int cmd, unsigned long arg); |
194 | static int pt_release(struct inode *inode, struct file *file); | 195 | static int pt_release(struct inode *inode, struct file *file); |
@@ -650,9 +651,9 @@ static int pt_open(struct inode *inode, struct file *file) | |||
650 | struct pt_unit *tape = pt + unit; | 651 | struct pt_unit *tape = pt + unit; |
651 | int err; | 652 | int err; |
652 | 653 | ||
653 | lock_kernel(); | 654 | mutex_lock(&pt_mutex); |
654 | if (unit >= PT_UNITS || (!tape->present)) { | 655 | if (unit >= PT_UNITS || (!tape->present)) { |
655 | unlock_kernel(); | 656 | mutex_unlock(&pt_mutex); |
656 | return -ENODEV; | 657 | return -ENODEV; |
657 | } | 658 | } |
658 | 659 | ||
@@ -681,12 +682,12 @@ static int pt_open(struct inode *inode, struct file *file) | |||
681 | } | 682 | } |
682 | 683 | ||
683 | file->private_data = tape; | 684 | file->private_data = tape; |
684 | unlock_kernel(); | 685 | mutex_unlock(&pt_mutex); |
685 | return 0; | 686 | return 0; |
686 | 687 | ||
687 | out: | 688 | out: |
688 | atomic_inc(&tape->available); | 689 | atomic_inc(&tape->available); |
689 | unlock_kernel(); | 690 | mutex_unlock(&pt_mutex); |
690 | return err; | 691 | return err; |
691 | } | 692 | } |
692 | 693 | ||
@@ -704,15 +705,15 @@ static long pt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
704 | switch (mtop.mt_op) { | 705 | switch (mtop.mt_op) { |
705 | 706 | ||
706 | case MTREW: | 707 | case MTREW: |
707 | lock_kernel(); | 708 | mutex_lock(&pt_mutex); |
708 | pt_rewind(tape); | 709 | pt_rewind(tape); |
709 | unlock_kernel(); | 710 | mutex_unlock(&pt_mutex); |
710 | return 0; | 711 | return 0; |
711 | 712 | ||
712 | case MTWEOF: | 713 | case MTWEOF: |
713 | lock_kernel(); | 714 | mutex_lock(&pt_mutex); |
714 | pt_write_fm(tape); | 715 | pt_write_fm(tape); |
715 | unlock_kernel(); | 716 | mutex_unlock(&pt_mutex); |
716 | return 0; | 717 | return 0; |
717 | 718 | ||
718 | default: | 719 | default: |