Message ID | Pine.LNX.4.44L0.1906251600270.1493-100000@iolanthe.rowland.org (mailing list archive) |
---|---|
State | Mainlined |
Commit | ffed60971f3d95923b99ea970862c6ab6a22c20f |
Headers | show |
Series | USB: core: Remove usbfs_mutex | expand |
On Tue, Jun 25, 2019 at 04:03:58PM -0400, Alan Stern wrote: > Commit 4a2a8a2cce86 ("usbfs: private mutex for open, release, and > remove") is now obsolete. The commit was created back when we had > to handle both usbfs device nodes and the old usbdevfs filesystem > (/proc/bus/usb/), but usbdevfs no longer exists. > > This means there's no longer any need to hold a mutex during two > separate removal operations (and thus during an entire notifier chain > call). Furthermore, the one remaining remove/release pair doesn't > race with open thanks to the synchronization provided by the device > model core in bus_find_device(). Remove and release don't race with > each other because they both run with the device lock held. > > The upshot is that usbfs_mutex isn't needed any more. This patch > removes it entirely. > > Signed-off-by: Alan Stern <stern@rowland.harvard.edu> > Ah, nice, I forgot all about this mutex, thanks for removing it! greg k-h
Index: usb-devel/drivers/usb/core/devio.c =================================================================== --- usb-devel.orig/drivers/usb/core/devio.c +++ usb-devel/drivers/usb/core/devio.c @@ -48,9 +48,6 @@ #define USB_DEVICE_MAX (USB_MAXBUS * 128) #define USB_SG_SIZE 16384 /* split-size for large txs */ -/* Mutual exclusion for removal, open, and release */ -DEFINE_MUTEX(usbfs_mutex); - struct usb_dev_state { struct list_head list; /* state list */ struct usb_device *dev; @@ -979,15 +976,9 @@ static int usbdev_open(struct inode *ino ret = -ENODEV; - /* Protect against simultaneous removal or release */ - mutex_lock(&usbfs_mutex); - /* usbdev device-node */ if (imajor(inode) == USB_DEVICE_MAJOR) dev = usbdev_lookup_by_devt(inode->i_rdev); - - mutex_unlock(&usbfs_mutex); - if (!dev) goto out_free_ps; Index: usb-devel/drivers/usb/core/notify.c =================================================================== --- usb-devel.orig/drivers/usb/core/notify.c +++ usb-devel/drivers/usb/core/notify.c @@ -53,11 +53,8 @@ void usb_notify_add_device(struct usb_de void usb_notify_remove_device(struct usb_device *udev) { - /* Protect against simultaneous usbfs open */ - mutex_lock(&usbfs_mutex); blocking_notifier_call_chain(&usb_notifier_list, USB_DEVICE_REMOVE, udev); - mutex_unlock(&usbfs_mutex); } void usb_notify_add_bus(struct usb_bus *ubus) Index: usb-devel/drivers/usb/core/usb.h =================================================================== --- usb-devel.orig/drivers/usb/core/usb.h +++ usb-devel/drivers/usb/core/usb.h @@ -169,7 +169,6 @@ extern const struct attribute_group *usb extern const struct attribute_group *usb_interface_groups[]; /* usbfs stuff */ -extern struct mutex usbfs_mutex; extern struct usb_driver usbfs_driver; extern const struct file_operations usbfs_devices_fops; extern const struct file_operations usbdev_file_operations;
Commit 4a2a8a2cce86 ("usbfs: private mutex for open, release, and remove") is now obsolete. The commit was created back when we had to handle both usbfs device nodes and the old usbdevfs filesystem (/proc/bus/usb/), but usbdevfs no longer exists. This means there's no longer any need to hold a mutex during two separate removal operations (and thus during an entire notifier chain call). Furthermore, the one remaining remove/release pair doesn't race with open thanks to the synchronization provided by the device model core in bus_find_device(). Remove and release don't race with each other because they both run with the device lock held. The upshot is that usbfs_mutex isn't needed any more. This patch removes it entirely. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> --- [as1904] drivers/usb/core/devio.c | 9 --------- drivers/usb/core/notify.c | 3 --- drivers/usb/core/usb.h | 1 - 3 files changed, 13 deletions(-)