diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2007-12-11 16:02:23 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-12-17 13:47:15 -0500 |
commit | d48bd977e0dd8c17081d12242bfc09d743ea0d26 (patch) | |
tree | f55e55a14cc938a3cd62026181a06c7c398f80ee | |
parent | f88ed90d8627d0d3d93b330d6d2012c2934fb54e (diff) |
USB: fix locking loop by avoiding flush_scheduled_work
This patch (as1027) replaces a call to flush_scheduled_work() -- a
dangerous routine to invoke, especially while holding any sort of lock
-- with calls to cancel_work_sync() and cancel_delayed_work_sync().
This fixes Bugzilla #9532.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
CC: David Brownell <david-b@pacbell.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/usb/core/hub.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 13b326a13377..b04d232d4c65 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
@@ -522,9 +522,9 @@ static void hub_quiesce(struct usb_hub *hub) | |||
522 | /* (blocking) stop khubd and related activity */ | 522 | /* (blocking) stop khubd and related activity */ |
523 | usb_kill_urb(hub->urb); | 523 | usb_kill_urb(hub->urb); |
524 | if (hub->has_indicators) | 524 | if (hub->has_indicators) |
525 | cancel_delayed_work(&hub->leds); | 525 | cancel_delayed_work_sync(&hub->leds); |
526 | if (hub->has_indicators || hub->tt.hub) | 526 | if (hub->tt.hub) |
527 | flush_scheduled_work(); | 527 | cancel_work_sync(&hub->tt.kevent); |
528 | } | 528 | } |
529 | 529 | ||
530 | static void hub_activate(struct usb_hub *hub) | 530 | static void hub_activate(struct usb_hub *hub) |