From: Stoyan Gaydarov <stoyboyker@xxxxxxxxx> Signed-off-by: Stoyan Gaydarov <stoyboyker@xxxxxxxxx> --- drivers/scsi/osst.c | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/osst.c b/drivers/scsi/osst.c index 0ea78d9..80e7e98 100644 --- a/drivers/scsi/osst.c +++ b/drivers/scsi/osst.c @@ -4856,9 +4856,10 @@ static int os_scsi_tape_close(struct inode * inode, struct file * filp) /* The ioctl command */ -static int osst_ioctl(struct inode * inode,struct file * file, - unsigned int cmd_in, unsigned long arg) +static long osst_ioctl(struct file * file, unsigned int cmd_in, + unsigned long arg) { + lock_kernel(); int i, cmd_nr, cmd_type, blk, retval = 0; struct st_modedef * STm; struct st_partstat * STps; @@ -4867,8 +4868,10 @@ static int osst_ioctl(struct inode * inode,struct file * file, char * name = tape_name(STp); void __user * p = (void __user *)arg; - if (mutex_lock_interruptible(&STp->lock)) + if (mutex_lock_interruptible(&STp->lock)) { + unlock_kernel(); return -ERESTARTSYS; + } #if DEBUG if (debugging && !STp->in_use) { @@ -5187,6 +5190,7 @@ out: mutex_unlock(&STp->lock); + unlock_kernel(); return retval; } @@ -5542,7 +5546,7 @@ static const struct file_operations osst_fops = { .owner = THIS_MODULE, .read = osst_read, .write = osst_write, - .ioctl = osst_ioctl, + .unlocked_ioctl = osst_ioctl, #ifdef CONFIG_COMPAT .compat_ioctl = osst_compat_ioctl, #endif -- 1.6.2 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html