diff options
| author | Duncan Sands <baldrick@free.fr> | 2004-06-07 00:21:48 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <greg@kroah.com> | 2004-06-07 00:21:48 -0700 |
| commit | a6df4e9c07695c3dc62d52bdc4030315ef05ca1b (patch) | |
| tree | a5272543832bb61cc5f523016c4008b3d3db63ce | |
| parent | 5bdcd0d5a771ddff271e0f0c08367b32c51dbd8c (diff) | |
[PATCH] USB devio.c: deadlock fix
proc_resetdevice is called with dev->serialize held.
usb_reset_device takes dev->serialize and then calls
__usb_reset_device. To avoid deadlock, proc_resetdevice
should call __usb_reset_device directly.
Signed-off-by: Duncan Sands <baldrick@free.fr>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
| -rw-r--r-- | drivers/usb/core/devio.c | 2 | ||||
| -rw-r--r-- | include/linux/usb.h | 1 |
2 files changed, 2 insertions, 1 deletions
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index 51b1aebda55d..29799129af3e 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c @@ -719,7 +719,7 @@ static int proc_connectinfo(struct dev_state *ps, void __user *arg) static int proc_resetdevice(struct dev_state *ps) { - return usb_reset_device(ps->dev); + return __usb_reset_device(ps->dev); } diff --git a/include/linux/usb.h b/include/linux/usb.h index cf243917d9c3..4013919efd98 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h @@ -334,6 +334,7 @@ extern void usb_put_dev(struct usb_device *dev); /* mostly for devices emulating SCSI over USB */ extern int usb_reset_device(struct usb_device *dev); +extern int __usb_reset_device(struct usb_device *dev); extern struct usb_device *usb_find_device(u16 vendor_id, u16 product_id); |
