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 <oliver@neukum.org> -- Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
Родитель
2feaace40e
Коммит
89092ddd7a
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче