From: Oliver Neukum Date: Wed, 29 Apr 2009 15:12:12 +0000 (+0200) Subject: HID: fix possible deadlock in usbhid_close() X-Git-Tag: v2.6.30-rc5~58^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=89092ddd7aca598e3b8874f7a49216e7917d8f3f;p=platform%2Fkernel%2Flinux-stable.git HID: fix possible deadlock in usbhid_close() This patch switches usbhid_close() from flush_scheduled_work() to canceling the outstanding work. This fixes a possible deadlock due to work taking the mutex usbhid_close() holds. Lockdep reported the problem. Signed-off-by: Oliver Neukum -- Signed-off-by: Jiri Kosina --- diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index 4306cb1..900ce18 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -662,8 +662,8 @@ void usbhid_close(struct hid_device *hid) spin_lock_irq(&usbhid->lock); if (!--hid->open) { spin_unlock_irq(&usbhid->lock); + hid_cancel_delayed_stuff(usbhid); usb_kill_urb(usbhid->urbin); - flush_scheduled_work(); usbhid->intf->needs_remote_wakeup = 0; } else { spin_unlock_irq(&usbhid->lock);