diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-24 11:01:10 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-24 11:01:10 -0400 |
commit | f13771187b9423b824f32518319f6da85d819003 (patch) | |
tree | c431cf16c286065a302d5f3fb43fc1abac7e4047 /drivers/scsi | |
parent | 15953654cc312429740fd58fb37a5a3d63a54376 (diff) | |
parent | 9f37af654fda88a8dcca74c785f6c20e52758866 (diff) |
Merge branch 'bkl/ioctl' of git://git.kernel.org/pub/scm/linux/kernel/git/frederic/random-tracing
* 'bkl/ioctl' of git://git.kernel.org/pub/scm/linux/kernel/git/frederic/random-tracing:
uml: Pushdown the bkl from harddog_kern ioctl
sunrpc: Pushdown the bkl from sunrpc cache ioctl
sunrpc: Pushdown the bkl from ioctl
autofs4: Pushdown the bkl from ioctl
uml: Convert to unlocked_ioctls to remove implicit BKL
ncpfs: BKL ioctl pushdown
coda: Clean-up whitespace problems in pioctl.c
coda: BKL ioctl pushdown
drivers: Push down BKL into various drivers
isdn: Push down BKL into ioctl functions
scsi: Push down BKL into ioctl functions
dvb: Push down BKL into ioctl functions
smbfs: Push down BKL into ioctl function
coda/psdev: Remove BKL from ioctl function
um/mmapper: Remove BKL usage
sn_hwperf: Kill BKL usage
hfsplus: Push down BKL into ioctl function
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/3w-9xxx.c | 10 | ||||
-rw-r--r-- | drivers/scsi/3w-sas.c | 8 | ||||
-rw-r--r-- | drivers/scsi/3w-xxxx.c | 11 | ||||
-rw-r--r-- | drivers/scsi/aacraid/linit.c | 11 | ||||
-rw-r--r-- | drivers/scsi/dpt_i2o.c | 20 | ||||
-rw-r--r-- | drivers/scsi/gdth.c | 20 | ||||
-rw-r--r-- | drivers/scsi/megaraid.c | 20 | ||||
-rw-r--r-- | drivers/scsi/megaraid.h | 3 | ||||
-rw-r--r-- | drivers/scsi/megaraid/megaraid_mm.c | 22 | ||||
-rw-r--r-- | drivers/scsi/osst.c | 14 | ||||
-rw-r--r-- | drivers/scsi/sg.c | 17 |
11 files changed, 120 insertions, 36 deletions
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c index 1bb774becf25..e20b7bdd4c78 100644 --- a/drivers/scsi/3w-9xxx.c +++ b/drivers/scsi/3w-9xxx.c | |||
@@ -125,7 +125,7 @@ static void twa_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_H | |||
125 | static int twa_aen_read_queue(TW_Device_Extension *tw_dev, int request_id); | 125 | static int twa_aen_read_queue(TW_Device_Extension *tw_dev, int request_id); |
126 | static char *twa_aen_severity_lookup(unsigned char severity_code); | 126 | static char *twa_aen_severity_lookup(unsigned char severity_code); |
127 | static void twa_aen_sync_time(TW_Device_Extension *tw_dev, int request_id); | 127 | static void twa_aen_sync_time(TW_Device_Extension *tw_dev, int request_id); |
128 | static int twa_chrdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg); | 128 | static long twa_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg); |
129 | static int twa_chrdev_open(struct inode *inode, struct file *file); | 129 | static int twa_chrdev_open(struct inode *inode, struct file *file); |
130 | static int twa_fill_sense(TW_Device_Extension *tw_dev, int request_id, int copy_sense, int print_host); | 130 | static int twa_fill_sense(TW_Device_Extension *tw_dev, int request_id, int copy_sense, int print_host); |
131 | static void twa_free_request_id(TW_Device_Extension *tw_dev,int request_id); | 131 | static void twa_free_request_id(TW_Device_Extension *tw_dev,int request_id); |
@@ -220,7 +220,7 @@ static struct device_attribute *twa_host_attrs[] = { | |||
220 | /* File operations struct for character device */ | 220 | /* File operations struct for character device */ |
221 | static const struct file_operations twa_fops = { | 221 | static const struct file_operations twa_fops = { |
222 | .owner = THIS_MODULE, | 222 | .owner = THIS_MODULE, |
223 | .ioctl = twa_chrdev_ioctl, | 223 | .unlocked_ioctl = twa_chrdev_ioctl, |
224 | .open = twa_chrdev_open, | 224 | .open = twa_chrdev_open, |
225 | .release = NULL | 225 | .release = NULL |
226 | }; | 226 | }; |
@@ -637,8 +637,9 @@ out: | |||
637 | } /* End twa_check_srl() */ | 637 | } /* End twa_check_srl() */ |
638 | 638 | ||
639 | /* This function handles ioctl for the character device */ | 639 | /* This function handles ioctl for the character device */ |
640 | static int twa_chrdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) | 640 | static long twa_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
641 | { | 641 | { |
642 | struct inode *inode = file->f_path.dentry->d_inode; | ||
642 | long timeout; | 643 | long timeout; |
643 | unsigned long *cpu_addr, data_buffer_length_adjusted = 0, flags = 0; | 644 | unsigned long *cpu_addr, data_buffer_length_adjusted = 0, flags = 0; |
644 | dma_addr_t dma_handle; | 645 | dma_addr_t dma_handle; |
@@ -657,6 +658,8 @@ static int twa_chrdev_ioctl(struct inode *inode, struct file *file, unsigned int | |||
657 | int retval = TW_IOCTL_ERROR_OS_EFAULT; | 658 | int retval = TW_IOCTL_ERROR_OS_EFAULT; |
658 | void __user *argp = (void __user *)arg; | 659 | void __user *argp = (void __user *)arg; |
659 | 660 | ||
661 | lock_kernel(); | ||
662 | |||
660 | /* Only let one of these through at a time */ | 663 | /* Only let one of these through at a time */ |
661 | if (mutex_lock_interruptible(&tw_dev->ioctl_lock)) { | 664 | if (mutex_lock_interruptible(&tw_dev->ioctl_lock)) { |
662 | retval = TW_IOCTL_ERROR_OS_EINTR; | 665 | retval = TW_IOCTL_ERROR_OS_EINTR; |
@@ -876,6 +879,7 @@ out3: | |||
876 | out2: | 879 | out2: |
877 | mutex_unlock(&tw_dev->ioctl_lock); | 880 | mutex_unlock(&tw_dev->ioctl_lock); |
878 | out: | 881 | out: |
882 | unlock_kernel(); | ||
879 | return retval; | 883 | return retval; |
880 | } /* End twa_chrdev_ioctl() */ | 884 | } /* End twa_chrdev_ioctl() */ |
881 | 885 | ||
diff --git a/drivers/scsi/3w-sas.c b/drivers/scsi/3w-sas.c index d38000db9237..f481e734aad4 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 | }; |
diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c index d119a614bf7d..30d735ad35b5 100644 --- a/drivers/scsi/3w-xxxx.c +++ b/drivers/scsi/3w-xxxx.c | |||
@@ -881,7 +881,7 @@ static int tw_allocate_memory(TW_Device_Extension *tw_dev, int size, int which) | |||
881 | } /* End tw_allocate_memory() */ | 881 | } /* End tw_allocate_memory() */ |
882 | 882 | ||
883 | /* This function handles ioctl for the character device */ | 883 | /* This function handles ioctl for the character device */ |
884 | static int tw_chrdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) | 884 | static long tw_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
885 | { | 885 | { |
886 | int request_id; | 886 | int request_id; |
887 | dma_addr_t dma_handle; | 887 | dma_addr_t dma_handle; |
@@ -889,6 +889,7 @@ static int tw_chrdev_ioctl(struct inode *inode, struct file *file, unsigned int | |||
889 | unsigned long flags; | 889 | unsigned long flags; |
890 | unsigned int data_buffer_length = 0; | 890 | unsigned int data_buffer_length = 0; |
891 | unsigned long data_buffer_length_adjusted = 0; | 891 | unsigned long data_buffer_length_adjusted = 0; |
892 | struct inode *inode = file->f_dentry->d_inode; | ||
892 | unsigned long *cpu_addr; | 893 | unsigned long *cpu_addr; |
893 | long timeout; | 894 | long timeout; |
894 | TW_New_Ioctl *tw_ioctl; | 895 | TW_New_Ioctl *tw_ioctl; |
@@ -899,9 +900,12 @@ static int tw_chrdev_ioctl(struct inode *inode, struct file *file, unsigned int | |||
899 | 900 | ||
900 | dprintk(KERN_WARNING "3w-xxxx: tw_chrdev_ioctl()\n"); | 901 | dprintk(KERN_WARNING "3w-xxxx: tw_chrdev_ioctl()\n"); |
901 | 902 | ||
903 | lock_kernel(); | ||
902 | /* Only let one of these through at a time */ | 904 | /* Only let one of these through at a time */ |
903 | if (mutex_lock_interruptible(&tw_dev->ioctl_lock)) | 905 | if (mutex_lock_interruptible(&tw_dev->ioctl_lock)) { |
906 | unlock_kernel(); | ||
904 | return -EINTR; | 907 | return -EINTR; |
908 | } | ||
905 | 909 | ||
906 | /* First copy down the buffer length */ | 910 | /* First copy down the buffer length */ |
907 | if (copy_from_user(&data_buffer_length, argp, sizeof(unsigned int))) | 911 | if (copy_from_user(&data_buffer_length, argp, sizeof(unsigned int))) |
@@ -1030,6 +1034,7 @@ out2: | |||
1030 | dma_free_coherent(&tw_dev->tw_pci_dev->dev, data_buffer_length_adjusted+sizeof(TW_New_Ioctl) - 1, cpu_addr, dma_handle); | 1034 | dma_free_coherent(&tw_dev->tw_pci_dev->dev, data_buffer_length_adjusted+sizeof(TW_New_Ioctl) - 1, cpu_addr, dma_handle); |
1031 | out: | 1035 | out: |
1032 | mutex_unlock(&tw_dev->ioctl_lock); | 1036 | mutex_unlock(&tw_dev->ioctl_lock); |
1037 | unlock_kernel(); | ||
1033 | return retval; | 1038 | return retval; |
1034 | } /* End tw_chrdev_ioctl() */ | 1039 | } /* End tw_chrdev_ioctl() */ |
1035 | 1040 | ||
@@ -1052,7 +1057,7 @@ static int tw_chrdev_open(struct inode *inode, struct file *file) | |||
1052 | /* File operations struct for character device */ | 1057 | /* File operations struct for character device */ |
1053 | static const struct file_operations tw_fops = { | 1058 | static const struct file_operations tw_fops = { |
1054 | .owner = THIS_MODULE, | 1059 | .owner = THIS_MODULE, |
1055 | .ioctl = tw_chrdev_ioctl, | 1060 | .unlocked_ioctl = tw_chrdev_ioctl, |
1056 | .open = tw_chrdev_open, | 1061 | .open = tw_chrdev_open, |
1057 | .release = NULL | 1062 | .release = NULL |
1058 | }; | 1063 | }; |
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index e9373a2d14fa..33898b61fdb5 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c | |||
@@ -705,12 +705,17 @@ static int aac_cfg_open(struct inode *inode, struct file *file) | |||
705 | * Bugs: Needs to handle hot plugging | 705 | * Bugs: Needs to handle hot plugging |
706 | */ | 706 | */ |
707 | 707 | ||
708 | static int aac_cfg_ioctl(struct inode *inode, struct file *file, | 708 | static long aac_cfg_ioctl(struct file *file, |
709 | unsigned int cmd, unsigned long arg) | 709 | unsigned int cmd, unsigned long arg) |
710 | { | 710 | { |
711 | int ret; | ||
711 | if (!capable(CAP_SYS_RAWIO)) | 712 | if (!capable(CAP_SYS_RAWIO)) |
712 | return -EPERM; | 713 | return -EPERM; |
713 | return aac_do_ioctl(file->private_data, cmd, (void __user *)arg); | 714 | lock_kernel(); |
715 | ret = aac_do_ioctl(file->private_data, cmd, (void __user *)arg); | ||
716 | unlock_kernel(); | ||
717 | |||
718 | return ret; | ||
714 | } | 719 | } |
715 | 720 | ||
716 | #ifdef CONFIG_COMPAT | 721 | #ifdef CONFIG_COMPAT |
@@ -1029,7 +1034,7 @@ ssize_t aac_get_serial_number(struct device *device, char *buf) | |||
1029 | 1034 | ||
1030 | static const struct file_operations aac_cfg_fops = { | 1035 | static const struct file_operations aac_cfg_fops = { |
1031 | .owner = THIS_MODULE, | 1036 | .owner = THIS_MODULE, |
1032 | .ioctl = aac_cfg_ioctl, | 1037 | .unlocked_ioctl = aac_cfg_ioctl, |
1033 | #ifdef CONFIG_COMPAT | 1038 | #ifdef CONFIG_COMPAT |
1034 | .compat_ioctl = aac_compat_cfg_ioctl, | 1039 | .compat_ioctl = aac_compat_cfg_ioctl, |
1035 | #endif | 1040 | #endif |
diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c index 0435d044c9da..b0c576f84b28 100644 --- a/drivers/scsi/dpt_i2o.c +++ b/drivers/scsi/dpt_i2o.c | |||
@@ -114,12 +114,13 @@ static int hba_count = 0; | |||
114 | 114 | ||
115 | static struct class *adpt_sysfs_class; | 115 | static struct class *adpt_sysfs_class; |
116 | 116 | ||
117 | static long adpt_unlocked_ioctl(struct file *, unsigned int, unsigned long); | ||
117 | #ifdef CONFIG_COMPAT | 118 | #ifdef CONFIG_COMPAT |
118 | static long compat_adpt_ioctl(struct file *, unsigned int, unsigned long); | 119 | static long compat_adpt_ioctl(struct file *, unsigned int, unsigned long); |
119 | #endif | 120 | #endif |
120 | 121 | ||
121 | static const struct file_operations adpt_fops = { | 122 | static const struct file_operations adpt_fops = { |
122 | .ioctl = adpt_ioctl, | 123 | .unlocked_ioctl = adpt_unlocked_ioctl, |
123 | .open = adpt_open, | 124 | .open = adpt_open, |
124 | .release = adpt_close, | 125 | .release = adpt_close, |
125 | #ifdef CONFIG_COMPAT | 126 | #ifdef CONFIG_COMPAT |
@@ -2069,8 +2070,7 @@ static int adpt_system_info(void __user *buffer) | |||
2069 | return 0; | 2070 | return 0; |
2070 | } | 2071 | } |
2071 | 2072 | ||
2072 | static int adpt_ioctl(struct inode *inode, struct file *file, uint cmd, | 2073 | static int adpt_ioctl(struct inode *inode, struct file *file, uint cmd, ulong arg) |
2073 | ulong arg) | ||
2074 | { | 2074 | { |
2075 | int minor; | 2075 | int minor; |
2076 | int error = 0; | 2076 | int error = 0; |
@@ -2153,6 +2153,20 @@ static int adpt_ioctl(struct inode *inode, struct file *file, uint cmd, | |||
2153 | return error; | 2153 | return error; |
2154 | } | 2154 | } |
2155 | 2155 | ||
2156 | static long adpt_unlocked_ioctl(struct file *file, uint cmd, ulong arg) | ||
2157 | { | ||
2158 | struct inode *inode; | ||
2159 | long ret; | ||
2160 | |||
2161 | inode = file->f_dentry->d_inode; | ||
2162 | |||
2163 | lock_kernel(); | ||
2164 | ret = adpt_ioctl(inode, file, cmd, arg); | ||
2165 | unlock_kernel(); | ||
2166 | |||
2167 | return ret; | ||
2168 | } | ||
2169 | |||
2156 | #ifdef CONFIG_COMPAT | 2170 | #ifdef CONFIG_COMPAT |
2157 | static long compat_adpt_ioctl(struct file *file, | 2171 | static long compat_adpt_ioctl(struct file *file, |
2158 | unsigned int cmd, unsigned long arg) | 2172 | unsigned int cmd, unsigned long arg) |
diff --git a/drivers/scsi/gdth.c b/drivers/scsi/gdth.c index a765fe7a55c3..f672d6213eea 100644 --- a/drivers/scsi/gdth.c +++ b/drivers/scsi/gdth.c | |||
@@ -180,8 +180,8 @@ static const char *gdth_ctr_name(gdth_ha_str *ha); | |||
180 | 180 | ||
181 | static int gdth_open(struct inode *inode, struct file *filep); | 181 | static int gdth_open(struct inode *inode, struct file *filep); |
182 | static int gdth_close(struct inode *inode, struct file *filep); | 182 | static int gdth_close(struct inode *inode, struct file *filep); |
183 | static int gdth_ioctl(struct inode *inode, struct file *filep, | 183 | static long gdth_unlocked_ioctl(struct file *filep, unsigned int cmd, |
184 | unsigned int cmd, unsigned long arg); | 184 | unsigned long arg); |
185 | 185 | ||
186 | static void gdth_flush(gdth_ha_str *ha); | 186 | static void gdth_flush(gdth_ha_str *ha); |
187 | static int gdth_queuecommand(Scsi_Cmnd *scp,void (*done)(Scsi_Cmnd *)); | 187 | static int gdth_queuecommand(Scsi_Cmnd *scp,void (*done)(Scsi_Cmnd *)); |
@@ -369,7 +369,7 @@ MODULE_LICENSE("GPL"); | |||
369 | 369 | ||
370 | /* ioctl interface */ | 370 | /* ioctl interface */ |
371 | static const struct file_operations gdth_fops = { | 371 | static const struct file_operations gdth_fops = { |
372 | .ioctl = gdth_ioctl, | 372 | .unlocked_ioctl = gdth_unlocked_ioctl, |
373 | .open = gdth_open, | 373 | .open = gdth_open, |
374 | .release = gdth_close, | 374 | .release = gdth_close, |
375 | }; | 375 | }; |
@@ -4462,8 +4462,7 @@ free_fail: | |||
4462 | return rc; | 4462 | return rc; |
4463 | } | 4463 | } |
4464 | 4464 | ||
4465 | static int gdth_ioctl(struct inode *inode, struct file *filep, | 4465 | static int gdth_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) |
4466 | unsigned int cmd, unsigned long arg) | ||
4467 | { | 4466 | { |
4468 | gdth_ha_str *ha; | 4467 | gdth_ha_str *ha; |
4469 | Scsi_Cmnd *scp; | 4468 | Scsi_Cmnd *scp; |
@@ -4611,6 +4610,17 @@ static int gdth_ioctl(struct inode *inode, struct file *filep, | |||
4611 | return 0; | 4610 | return 0; |
4612 | } | 4611 | } |
4613 | 4612 | ||
4613 | static long gdth_unlocked_ioctl(struct file *file, unsigned int cmd, | ||
4614 | unsigned long arg) | ||
4615 | { | ||
4616 | int ret; | ||
4617 | |||
4618 | lock_kernel(); | ||
4619 | ret = gdth_ioctl(file, cmd, arg); | ||
4620 | unlock_kernel(); | ||
4621 | |||
4622 | return ret; | ||
4623 | } | ||
4614 | 4624 | ||
4615 | /* flush routine */ | 4625 | /* flush routine */ |
4616 | static void gdth_flush(gdth_ha_str *ha) | 4626 | static void gdth_flush(gdth_ha_str *ha) |
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c index 4bf7edca9e69..0b6e3228610a 100644 --- a/drivers/scsi/megaraid.c +++ b/drivers/scsi/megaraid.c | |||
@@ -91,12 +91,15 @@ static struct proc_dir_entry *mega_proc_dir_entry; | |||
91 | /* For controller re-ordering */ | 91 | /* For controller re-ordering */ |
92 | static struct mega_hbas mega_hbas[MAX_CONTROLLERS]; | 92 | static struct mega_hbas mega_hbas[MAX_CONTROLLERS]; |
93 | 93 | ||
94 | static long | ||
95 | megadev_unlocked_ioctl(struct file *filep, unsigned int cmd, unsigned long arg); | ||
96 | |||
94 | /* | 97 | /* |
95 | * The File Operations structure for the serial/ioctl interface of the driver | 98 | * The File Operations structure for the serial/ioctl interface of the driver |
96 | */ | 99 | */ |
97 | static const struct file_operations megadev_fops = { | 100 | static const struct file_operations megadev_fops = { |
98 | .owner = THIS_MODULE, | 101 | .owner = THIS_MODULE, |
99 | .ioctl = megadev_ioctl, | 102 | .unlocked_ioctl = megadev_unlocked_ioctl, |
100 | .open = megadev_open, | 103 | .open = megadev_open, |
101 | }; | 104 | }; |
102 | 105 | ||
@@ -3302,8 +3305,7 @@ megadev_open (struct inode *inode, struct file *filep) | |||
3302 | * controller. | 3305 | * controller. |
3303 | */ | 3306 | */ |
3304 | static int | 3307 | static int |
3305 | megadev_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, | 3308 | megadev_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) |
3306 | unsigned long arg) | ||
3307 | { | 3309 | { |
3308 | adapter_t *adapter; | 3310 | adapter_t *adapter; |
3309 | nitioctl_t uioc; | 3311 | nitioctl_t uioc; |
@@ -3694,6 +3696,18 @@ freemem_and_return: | |||
3694 | return 0; | 3696 | return 0; |
3695 | } | 3697 | } |
3696 | 3698 | ||
3699 | static long | ||
3700 | megadev_unlocked_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) | ||
3701 | { | ||
3702 | int ret; | ||
3703 | |||
3704 | lock_kernel(); | ||
3705 | ret = megadev_ioctl(filep, cmd, arg); | ||
3706 | unlock_kernel(); | ||
3707 | |||
3708 | return ret; | ||
3709 | } | ||
3710 | |||
3697 | /** | 3711 | /** |
3698 | * mega_m_to_n() | 3712 | * mega_m_to_n() |
3699 | * @arg - user address | 3713 | * @arg - user address |
diff --git a/drivers/scsi/megaraid.h b/drivers/scsi/megaraid.h index d310f49d077e..2b4a048cadf1 100644 --- a/drivers/scsi/megaraid.h +++ b/drivers/scsi/megaraid.h | |||
@@ -1013,8 +1013,7 @@ static void mega_8_to_40ld (mraid_inquiry *inquiry, | |||
1013 | mega_inquiry3 *enquiry3, mega_product_info *); | 1013 | mega_inquiry3 *enquiry3, mega_product_info *); |
1014 | 1014 | ||
1015 | static int megadev_open (struct inode *, struct file *); | 1015 | static int megadev_open (struct inode *, struct file *); |
1016 | static int megadev_ioctl (struct inode *, struct file *, unsigned int, | 1016 | static int megadev_ioctl (struct file *, unsigned int, unsigned long); |
1017 | unsigned long); | ||
1018 | static int mega_m_to_n(void __user *, nitioctl_t *); | 1017 | static int mega_m_to_n(void __user *, nitioctl_t *); |
1019 | static int mega_n_to_m(void __user *, megacmd_t *); | 1018 | static int mega_n_to_m(void __user *, megacmd_t *); |
1020 | 1019 | ||
diff --git a/drivers/scsi/megaraid/megaraid_mm.c b/drivers/scsi/megaraid/megaraid_mm.c index 36e0b7d05c1d..41f82f76d884 100644 --- a/drivers/scsi/megaraid/megaraid_mm.c +++ b/drivers/scsi/megaraid/megaraid_mm.c | |||
@@ -22,7 +22,7 @@ | |||
22 | 22 | ||
23 | // Entry points for char node driver | 23 | // Entry points for char node driver |
24 | static int mraid_mm_open(struct inode *, struct file *); | 24 | static int mraid_mm_open(struct inode *, struct file *); |
25 | static int mraid_mm_ioctl(struct inode *, struct file *, uint, unsigned long); | 25 | static long mraid_mm_unlocked_ioctl(struct file *, uint, unsigned long); |
26 | 26 | ||
27 | 27 | ||
28 | // routines to convert to and from the old the format | 28 | // routines to convert to and from the old the format |
@@ -70,7 +70,7 @@ static wait_queue_head_t wait_q; | |||
70 | 70 | ||
71 | static const struct file_operations lsi_fops = { | 71 | static const struct file_operations lsi_fops = { |
72 | .open = mraid_mm_open, | 72 | .open = mraid_mm_open, |
73 | .ioctl = mraid_mm_ioctl, | 73 | .unlocked_ioctl = mraid_mm_unlocked_ioctl, |
74 | #ifdef CONFIG_COMPAT | 74 | #ifdef CONFIG_COMPAT |
75 | .compat_ioctl = mraid_mm_compat_ioctl, | 75 | .compat_ioctl = mraid_mm_compat_ioctl, |
76 | #endif | 76 | #endif |
@@ -110,8 +110,7 @@ mraid_mm_open(struct inode *inode, struct file *filep) | |||
110 | * @arg : user ioctl packet | 110 | * @arg : user ioctl packet |
111 | */ | 111 | */ |
112 | static int | 112 | static int |
113 | mraid_mm_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, | 113 | mraid_mm_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) |
114 | unsigned long arg) | ||
115 | { | 114 | { |
116 | uioc_t *kioc; | 115 | uioc_t *kioc; |
117 | char signature[EXT_IOCTL_SIGN_SZ] = {0}; | 116 | char signature[EXT_IOCTL_SIGN_SZ] = {0}; |
@@ -218,6 +217,19 @@ mraid_mm_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, | |||
218 | return rval; | 217 | return rval; |
219 | } | 218 | } |
220 | 219 | ||
220 | static long | ||
221 | mraid_mm_unlocked_ioctl(struct file *filep, unsigned int cmd, | ||
222 | unsigned long arg) | ||
223 | { | ||
224 | int err; | ||
225 | |||
226 | /* inconsistant: mraid_mm_compat_ioctl doesn't take the BKL */ | ||
227 | lock_kernel(); | ||
228 | err = mraid_mm_ioctl(filep, cmd, arg); | ||
229 | unlock_kernel(); | ||
230 | |||
231 | return err; | ||
232 | } | ||
221 | 233 | ||
222 | /** | 234 | /** |
223 | * mraid_mm_get_adapter - Returns corresponding adapters for the mimd packet | 235 | * mraid_mm_get_adapter - Returns corresponding adapters for the mimd packet |
@@ -1225,7 +1237,7 @@ mraid_mm_compat_ioctl(struct file *filep, unsigned int cmd, | |||
1225 | { | 1237 | { |
1226 | int err; | 1238 | int err; |
1227 | 1239 | ||
1228 | err = mraid_mm_ioctl(NULL, filep, cmd, arg); | 1240 | err = mraid_mm_ioctl(filep, cmd, arg); |
1229 | 1241 | ||
1230 | return err; | 1242 | return err; |
1231 | } | 1243 | } |
diff --git a/drivers/scsi/osst.c b/drivers/scsi/osst.c index b219118f8bd6..8dbf1c3afb7b 100644 --- a/drivers/scsi/osst.c +++ b/drivers/scsi/osst.c | |||
@@ -4932,7 +4932,7 @@ static int os_scsi_tape_close(struct inode * inode, struct file * filp) | |||
4932 | 4932 | ||
4933 | 4933 | ||
4934 | /* The ioctl command */ | 4934 | /* The ioctl command */ |
4935 | static int osst_ioctl(struct inode * inode,struct file * file, | 4935 | static long osst_ioctl(struct file * file, |
4936 | unsigned int cmd_in, unsigned long arg) | 4936 | unsigned int cmd_in, unsigned long arg) |
4937 | { | 4937 | { |
4938 | int i, cmd_nr, cmd_type, blk, retval = 0; | 4938 | int i, cmd_nr, cmd_type, blk, retval = 0; |
@@ -4943,8 +4943,11 @@ static int osst_ioctl(struct inode * inode,struct file * file, | |||
4943 | char * name = tape_name(STp); | 4943 | char * name = tape_name(STp); |
4944 | void __user * p = (void __user *)arg; | 4944 | void __user * p = (void __user *)arg; |
4945 | 4945 | ||
4946 | if (mutex_lock_interruptible(&STp->lock)) | 4946 | lock_kernel(); |
4947 | if (mutex_lock_interruptible(&STp->lock)) { | ||
4948 | unlock_kernel(); | ||
4947 | return -ERESTARTSYS; | 4949 | return -ERESTARTSYS; |
4950 | } | ||
4948 | 4951 | ||
4949 | #if DEBUG | 4952 | #if DEBUG |
4950 | if (debugging && !STp->in_use) { | 4953 | if (debugging && !STp->in_use) { |
@@ -5256,12 +5259,15 @@ static int osst_ioctl(struct inode * inode,struct file * file, | |||
5256 | 5259 | ||
5257 | mutex_unlock(&STp->lock); | 5260 | mutex_unlock(&STp->lock); |
5258 | 5261 | ||
5259 | return scsi_ioctl(STp->device, cmd_in, p); | 5262 | retval = scsi_ioctl(STp->device, cmd_in, p); |
5263 | unlock_kernel(); | ||
5264 | return retval; | ||
5260 | 5265 | ||
5261 | out: | 5266 | out: |
5262 | if (SRpnt) osst_release_request(SRpnt); | 5267 | if (SRpnt) osst_release_request(SRpnt); |
5263 | 5268 | ||
5264 | mutex_unlock(&STp->lock); | 5269 | mutex_unlock(&STp->lock); |
5270 | unlock_kernel(); | ||
5265 | 5271 | ||
5266 | return retval; | 5272 | return retval; |
5267 | } | 5273 | } |
@@ -5613,7 +5619,7 @@ static const struct file_operations osst_fops = { | |||
5613 | .owner = THIS_MODULE, | 5619 | .owner = THIS_MODULE, |
5614 | .read = osst_read, | 5620 | .read = osst_read, |
5615 | .write = osst_write, | 5621 | .write = osst_write, |
5616 | .ioctl = osst_ioctl, | 5622 | .unlocked_ioctl = osst_ioctl, |
5617 | #ifdef CONFIG_COMPAT | 5623 | #ifdef CONFIG_COMPAT |
5618 | .compat_ioctl = osst_compat_ioctl, | 5624 | .compat_ioctl = osst_compat_ioctl, |
5619 | #endif | 5625 | #endif |
diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c index dee1c96288d4..ef752b248c4d 100644 --- a/drivers/scsi/sg.c +++ b/drivers/scsi/sg.c | |||
@@ -758,8 +758,7 @@ sg_common_write(Sg_fd * sfp, Sg_request * srp, | |||
758 | } | 758 | } |
759 | 759 | ||
760 | static int | 760 | static int |
761 | sg_ioctl(struct inode *inode, struct file *filp, | 761 | sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg) |
762 | unsigned int cmd_in, unsigned long arg) | ||
763 | { | 762 | { |
764 | void __user *p = (void __user *)arg; | 763 | void __user *p = (void __user *)arg; |
765 | int __user *ip = p; | 764 | int __user *ip = p; |
@@ -1078,6 +1077,18 @@ sg_ioctl(struct inode *inode, struct file *filp, | |||
1078 | } | 1077 | } |
1079 | } | 1078 | } |
1080 | 1079 | ||
1080 | static long | ||
1081 | sg_unlocked_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg) | ||
1082 | { | ||
1083 | int ret; | ||
1084 | |||
1085 | lock_kernel(); | ||
1086 | ret = sg_ioctl(filp, cmd_in, arg); | ||
1087 | unlock_kernel(); | ||
1088 | |||
1089 | return ret; | ||
1090 | } | ||
1091 | |||
1081 | #ifdef CONFIG_COMPAT | 1092 | #ifdef CONFIG_COMPAT |
1082 | static long sg_compat_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg) | 1093 | static long sg_compat_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg) |
1083 | { | 1094 | { |
@@ -1322,7 +1333,7 @@ static const struct file_operations sg_fops = { | |||
1322 | .read = sg_read, | 1333 | .read = sg_read, |
1323 | .write = sg_write, | 1334 | .write = sg_write, |
1324 | .poll = sg_poll, | 1335 | .poll = sg_poll, |
1325 | .ioctl = sg_ioctl, | 1336 | .unlocked_ioctl = sg_unlocked_ioctl, |
1326 | #ifdef CONFIG_COMPAT | 1337 | #ifdef CONFIG_COMPAT |
1327 | .compat_ioctl = sg_compat_ioctl, | 1338 | .compat_ioctl = sg_compat_ioctl, |
1328 | #endif | 1339 | #endif |