aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/paride/pt.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/paride/pt.c')
-rw-r--r--drivers/block/paride/pt.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/block/paride/pt.c b/drivers/block/paride/pt.c
index bc5825fdeaa..e4dda282e0a 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
192static DEFINE_MUTEX(pt_mutex);
192static int pt_open(struct inode *inode, struct file *file); 193static int pt_open(struct inode *inode, struct file *file);
193static long pt_ioctl(struct file *file, unsigned int cmd, unsigned long arg); 194static long pt_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
194static int pt_release(struct inode *inode, struct file *file); 195static 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
687out: 688out:
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: