Commit f7fea185 authored by Mathieu Segaud's avatar Mathieu Segaud Committed by James Bottomley

[SCSI] ch: Convert to use unlocked_ioctl

As of now, compat_ioctl already runs without the BKL, whereas ioctl runs
with the BKL. This patch first converts changer_fops to use a .unlocked_ioctl
member. It applies the same locking rationale than ch_ioctl_compat() uses
to ch_ioctl().
Signed-off-by: default avatarMathieu Segaud <mathieu.segaud@regala.cx>
Reviewed-by: default avatarMatthew Wilcox <willy@linux.intel.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent eaa3e22e
...@@ -92,8 +92,7 @@ static int ch_probe(struct device *); ...@@ -92,8 +92,7 @@ static int ch_probe(struct device *);
static int ch_remove(struct device *); static int ch_remove(struct device *);
static int ch_open(struct inode * inode, struct file * filp); static int ch_open(struct inode * inode, struct file * filp);
static int ch_release(struct inode * inode, struct file * filp); static int ch_release(struct inode * inode, struct file * filp);
static int ch_ioctl(struct inode * inode, struct file * filp, static long ch_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
unsigned int cmd, unsigned long arg);
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
static long ch_ioctl_compat(struct file * filp, static long ch_ioctl_compat(struct file * filp,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
...@@ -130,12 +129,12 @@ static struct scsi_driver ch_template = ...@@ -130,12 +129,12 @@ static struct scsi_driver ch_template =
static const struct file_operations changer_fops = static const struct file_operations changer_fops =
{ {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = ch_open, .open = ch_open,
.release = ch_release, .release = ch_release,
.ioctl = ch_ioctl, .unlocked_ioctl = ch_ioctl,
#ifdef CONFIG_COMPAT #ifdef CONFIG_COMPAT
.compat_ioctl = ch_ioctl_compat, .compat_ioctl = ch_ioctl_compat,
#endif #endif
}; };
...@@ -626,7 +625,7 @@ ch_checkrange(scsi_changer *ch, unsigned int type, unsigned int unit) ...@@ -626,7 +625,7 @@ ch_checkrange(scsi_changer *ch, unsigned int type, unsigned int unit)
return 0; return 0;
} }
static int ch_ioctl(struct inode * inode, struct file * file, static long ch_ioctl(struct file *file,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
scsi_changer *ch = file->private_data; scsi_changer *ch = file->private_data;
...@@ -887,8 +886,7 @@ static long ch_ioctl_compat(struct file * file, ...@@ -887,8 +886,7 @@ static long ch_ioctl_compat(struct file * file,
case CHIOINITELEM: case CHIOINITELEM:
case CHIOSVOLTAG: case CHIOSVOLTAG:
/* compatible */ /* compatible */
return ch_ioctl(NULL /* inode, unused */, return ch_ioctl(file, cmd, arg);
file, cmd, arg);
case CHIOGSTATUS32: case CHIOGSTATUS32:
{ {
struct changer_element_status32 ces32; struct changer_element_status32 ces32;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment