diff options
author | Jiri Kosina <jkosina@suse.cz> | 2010-06-16 12:08:13 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2010-06-16 12:08:13 -0400 |
commit | f1bbbb6912662b9f6070c5bfc4ca9eb1f06a9d5b (patch) | |
tree | c2c130a74be25b0b2dff992e1a195e2728bdaadd /drivers/scsi/3w-sas.c | |
parent | fd0961ff67727482bb20ca7e8ea97b83e9de2ddb (diff) | |
parent | 7e27d6e778cd87b6f2415515d7127eba53fe5d02 (diff) |
Merge branch 'master' into for-next
Diffstat (limited to 'drivers/scsi/3w-sas.c')
-rw-r--r-- | drivers/scsi/3w-sas.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/scsi/3w-sas.c b/drivers/scsi/3w-sas.c index d38000db923..f481e734aad 100644 --- a/drivers/scsi/3w-sas.c +++ b/drivers/scsi/3w-sas.c | |||
@@ -750,19 +750,22 @@ static void twl_load_sgl(TW_Device_Extension *tw_dev, TW_Command_Full *full_comm | |||
750 | 750 | ||
751 | /* This function handles ioctl for the character device | 751 | /* This function handles ioctl for the character device |
752 | This interface is used by smartmontools open source software */ | 752 | This interface is used by smartmontools open source software */ |
753 | static int twl_chrdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) | 753 | static long twl_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
754 | { | 754 | { |
755 | long timeout; | 755 | long timeout; |
756 | unsigned long *cpu_addr, data_buffer_length_adjusted = 0, flags = 0; | 756 | unsigned long *cpu_addr, data_buffer_length_adjusted = 0, flags = 0; |
757 | dma_addr_t dma_handle; | 757 | dma_addr_t dma_handle; |
758 | int request_id = 0; | 758 | int request_id = 0; |
759 | TW_Ioctl_Driver_Command driver_command; | 759 | TW_Ioctl_Driver_Command driver_command; |
760 | struct inode *inode = file->f_dentry->d_inode; | ||
760 | TW_Ioctl_Buf_Apache *tw_ioctl; | 761 | TW_Ioctl_Buf_Apache *tw_ioctl; |
761 | TW_Command_Full *full_command_packet; | 762 | TW_Command_Full *full_command_packet; |
762 | TW_Device_Extension *tw_dev = twl_device_extension_list[iminor(inode)]; | 763 | TW_Device_Extension *tw_dev = twl_device_extension_list[iminor(inode)]; |
763 | int retval = -EFAULT; | 764 | int retval = -EFAULT; |
764 | void __user *argp = (void __user *)arg; | 765 | void __user *argp = (void __user *)arg; |
765 | 766 | ||
767 | lock_kernel(); | ||
768 | |||
766 | /* Only let one of these through at a time */ | 769 | /* Only let one of these through at a time */ |
767 | if (mutex_lock_interruptible(&tw_dev->ioctl_lock)) { | 770 | if (mutex_lock_interruptible(&tw_dev->ioctl_lock)) { |
768 | retval = -EINTR; | 771 | retval = -EINTR; |
@@ -858,6 +861,7 @@ out3: | |||
858 | out2: | 861 | out2: |
859 | mutex_unlock(&tw_dev->ioctl_lock); | 862 | mutex_unlock(&tw_dev->ioctl_lock); |
860 | out: | 863 | out: |
864 | unlock_kernel(); | ||
861 | return retval; | 865 | return retval; |
862 | } /* End twl_chrdev_ioctl() */ | 866 | } /* End twl_chrdev_ioctl() */ |
863 | 867 | ||
@@ -884,7 +888,7 @@ out: | |||
884 | /* File operations struct for character device */ | 888 | /* File operations struct for character device */ |
885 | static const struct file_operations twl_fops = { | 889 | static const struct file_operations twl_fops = { |
886 | .owner = THIS_MODULE, | 890 | .owner = THIS_MODULE, |
887 | .ioctl = twl_chrdev_ioctl, | 891 | .unlocked_ioctl = twl_chrdev_ioctl, |
888 | .open = twl_chrdev_open, | 892 | .open = twl_chrdev_open, |
889 | .release = NULL | 893 | .release = NULL |
890 | }; | 894 | }; |