summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2004-06-07 00:21:48 -0700
committerGreg Kroah-Hartman <greg@kroah.com>2004-06-07 00:21:48 -0700
commita6df4e9c07695c3dc62d52bdc4030315ef05ca1b (patch)
treea5272543832bb61cc5f523016c4008b3d3db63ce
parent5bdcd0d5a771ddff271e0f0c08367b32c51dbd8c (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.c2
-rw-r--r--include/linux/usb.h1
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);