3ware: BKL elimination
PATCH 1/1 3ware: BKL elimination
The 3ware driver internal locking appears complete so we just stop taking the BKL on ioctls from the management handle
Signed-off-by Alan Cox <[email protected]>
drivers/scsi/3w-9xxx.c +5 -4
@@ -111,7 +111,7 @@ static void twa_aen_queue_event(TW_Device_Extension *tw_dev, TW_Command_Apache_Hstatic int twa_aen_read_queue (TW_Device_Extension *tw_dev,int request_id);static char *twa_aen_severity_lookup (unsigned char severity_code);static void twa_aen_sync_time (TW_Device_Extension *tw_dev,int request_id); -static int twa_chrdev_ioctl (struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg); +static long twa_chrdev_ioctl (struct file *file,unsigned int cmd,unsigned long arg);static int twa_chrdev_open (struct inode *inode,struct file *file);static int twa_fill_sense (TW_Device_Extension *tw_dev,int request_id,int copy_sense,int print_host);static void twa_free_request_id (TW_Device_Extension *tw_dev,int request_id);
@@ -202,7 +202,7 @@ static struct device_attribute *twa_host_attrs[] = {/* File operations struct for character device */ static const struct file_operations twa_fops = { .owner =THIS_MODULE , - .ioctl = twa_chrdev_ioctl, + .unlocked_ioctl = twa_chrdev_ioctl, .open = twa_chrdev_open, .release =NULL };
@@ -619,7 +619,7 @@ out: }/* End twa_check_srl() */ /* This function handles ioctl for the character device */ -static int twa_chrdev_ioctl (struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg) +static long twa_chrdev_ioctl (struct file *file,unsigned int cmd,unsigned long arg) {long timeout;unsigned long *cpu_addr, data_buffer_length_adjusted =0 , flags =0 ;
@@ -635,7 +635,8 @@ static int twa_chrdev_ioctl(struct inode *inode, struct file *file, unsigned intTW_Event *event;struct timeval current_time;u32 current_time_ms; -TW_Device_Extension *tw_dev = twa_device_extension_list[iminor (inode)]; +unsigned int minor =iminor (file->f_path.dentry->d_inode); +TW_Device_Extension *tw_dev = twa_device_extension_list[minor];int retval =TW_IOCTL_ERROR_OS_EFAULT ;void __user *argp = (void __user *)arg;
drivers/scsi/3w-xxxx.c +4 -3
@@ -874,7 +874,7 @@ static int tw_allocate_memory(TW_Device_Extension *tw_dev, int size, int which) }/* End tw_allocate_memory() */ /* This function handles ioctl for the character device */ -static int tw_chrdev_ioctl (struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg) +static long tw_chrdev_ioctl (struct file *file,unsigned int cmd,unsigned long arg) {int request_id;dma_addr_t dma_handle;
@@ -886,7 +886,8 @@ static int tw_chrdev_ioctl(struct inode *inode, struct file *file, unsigned intlong timeout;TW_New_Ioctl *tw_ioctl;TW_Passthru *passthru; -TW_Device_Extension *tw_dev = tw_device_extension_list[iminor (inode)]; +unsigned int minor =iminor (file->f_path.dentry->d_inode); +TW_Device_Extension *tw_dev = tw_device_extension_list[minor];int retval = -EFAULT ;void __user *argp = (void __user *)arg;
@@ -1043,7 +1044,7 @@ static int tw_chrdev_open(struct inode *inode, struct file *file)/* File operations struct for character device */ static const struct file_operations tw_fops = { .owner =THIS_MODULE , - .ioctl = tw_chrdev_ioctl, + .unlocked_ioctl = tw_chrdev_ioctl, .open = tw_chrdev_open, .release =NULL };