From a6df4e9c07695c3dc62d52bdc4030315ef05ca1b Mon Sep 17 00:00:00 2001 From: Duncan Sands Date: Mon, 7 Jun 2004 00:21:48 -0700 Subject: [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 Signed-off-by: Greg Kroah-Hartman --- drivers/usb/core/devio.c | 2 +- include/linux/usb.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) 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); -- cgit v1.2.3