Skip to content

Commit

Permalink
[SCSI] ch: Convert to use unlocked_ioctl
Browse files Browse the repository at this point in the history
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: Mathieu Segaud <mathieu.segaud@regala.cx>
Reviewed-by: Matthew Wilcox <willy@linux.intel.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
  • Loading branch information
Mathieu Segaud authored and James Bottomley committed Jan 23, 2008
1 parent eaa3e22 commit f7fea18
Showing 1 changed file with 8 additions and 10 deletions.
18 changes: 8 additions & 10 deletions drivers/scsi/ch.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,7 @@ static int ch_probe(struct device *);
static int ch_remove(struct device *);
static int ch_open(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,
unsigned int cmd, unsigned long arg);
static long ch_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
#ifdef CONFIG_COMPAT
static long ch_ioctl_compat(struct file * filp,
unsigned int cmd, unsigned long arg);
Expand Down Expand Up @@ -130,12 +129,12 @@ static struct scsi_driver ch_template =

static const struct file_operations changer_fops =
{
.owner = THIS_MODULE,
.open = ch_open,
.release = ch_release,
.ioctl = ch_ioctl,
.owner = THIS_MODULE,
.open = ch_open,
.release = ch_release,
.unlocked_ioctl = ch_ioctl,
#ifdef CONFIG_COMPAT
.compat_ioctl = ch_ioctl_compat,
.compat_ioctl = ch_ioctl_compat,
#endif
};

Expand Down Expand Up @@ -626,7 +625,7 @@ ch_checkrange(scsi_changer *ch, unsigned int type, unsigned int unit)
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)
{
scsi_changer *ch = file->private_data;
Expand Down Expand Up @@ -887,8 +886,7 @@ static long ch_ioctl_compat(struct file * file,
case CHIOINITELEM:
case CHIOSVOLTAG:
/* compatible */
return ch_ioctl(NULL /* inode, unused */,
file, cmd, arg);
return ch_ioctl(file, cmd, arg);
case CHIOGSTATUS32:
{
struct changer_element_status32 ces32;
Expand Down

0 comments on commit f7fea18

Please sign in to comment.