Skip to content

Commit

Permalink
USB: BKL removal from ioctl path of usbfs
Browse files Browse the repository at this point in the history
Total removal from the ioctl code path except for the outcall
to external modules. Locking is ensured by the normal locks
of usbfs.

Signed-off-by: Oliver Neukum <oliver@neukum.org>
Cc: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Oliver Neukum authored and Greg Kroah-Hartman committed Mar 2, 2010
1 parent 9fd5c67 commit 2a9d008
Showing 1 changed file with 3 additions and 9 deletions.
12 changes: 3 additions & 9 deletions drivers/usb/core/devio.c
Original file line number Diff line number Diff line change
Expand Up @@ -1636,7 +1636,10 @@ static int proc_ioctl(struct dev_state *ps, struct usbdevfs_ioctl *ctl)
if (driver == NULL || driver->ioctl == NULL) {
retval = -ENOTTY;
} else {
/* keep API that guarantees BKL */
lock_kernel();
retval = driver->ioctl(intf, ctl->ioctl_code, buf);
unlock_kernel();
if (retval == -ENOIOCTLCMD)
retval = -ENOTTY;
}
Expand Down Expand Up @@ -1720,11 +1723,9 @@ static long usbdev_do_ioctl(struct file *file, unsigned int cmd,
if (!(file->f_mode & FMODE_WRITE))
return -EPERM;

lock_kernel();
usb_lock_device(dev);
if (!connected(ps)) {
usb_unlock_device(dev);
unlock_kernel();
return -ENODEV;
}

Expand Down Expand Up @@ -1783,12 +1784,10 @@ static long usbdev_do_ioctl(struct file *file, unsigned int cmd,
break;

case USBDEVFS_SUBMITURB:
unlock_kernel();
snoop(&dev->dev, "%s: SUBMITURB\n", __func__);
ret = proc_submiturb(ps, p);
if (ret >= 0)
inode->i_mtime = CURRENT_TIME;
lock_kernel();
break;

#ifdef CONFIG_COMPAT
Expand Down Expand Up @@ -1840,17 +1839,13 @@ static long usbdev_do_ioctl(struct file *file, unsigned int cmd,
break;

case USBDEVFS_REAPURB:
unlock_kernel();
snoop(&dev->dev, "%s: REAPURB\n", __func__);
ret = proc_reapurb(ps, p);
lock_kernel();
break;

case USBDEVFS_REAPURBNDELAY:
unlock_kernel();
snoop(&dev->dev, "%s: REAPURBNDELAY\n", __func__);
ret = proc_reapurbnonblock(ps, p);
lock_kernel();
break;

case USBDEVFS_DISCSIGNAL:
Expand Down Expand Up @@ -1884,7 +1879,6 @@ static long usbdev_do_ioctl(struct file *file, unsigned int cmd,
break;
}
usb_unlock_device(dev);
unlock_kernel();
if (ret >= 0)
inode->i_atime = CURRENT_TIME;
return ret;
Expand Down

0 comments on commit 2a9d008

Please sign in to comment.