diff options
| author | Ingo Molnar <mingo@elte.hu> | 2008-09-10 09:09:51 +0200 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-09-10 09:09:51 +0200 | 
| commit | 6003ab0bad4cc56f3c4fadf62a0d23a967b9c53b (patch) | |
| tree | 2087ca69776116b70a6af0daae9c10bfac1aa347 /drivers/usb/core/urb.c | |
| parent | ab7476cf76e560f0efda2a631a70aabe93009025 (diff) | |
| parent | adee14b2e1557d0a8559f29681732d05a89dfc35 (diff) | |
Merge branch 'linus' into core/debug
Conflicts:
	lib/vsprintf.c
Manual merge:
	include/linux/kernel.h
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers/usb/core/urb.c')
| -rw-r--r-- | drivers/usb/core/urb.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c index c0b1ae25ae2..47111e88f79 100644 --- a/drivers/usb/core/urb.c +++ b/drivers/usb/core/urb.c @@ -601,15 +601,20 @@ EXPORT_SYMBOL_GPL(usb_kill_anchored_urbs);  void usb_unlink_anchored_urbs(struct usb_anchor *anchor)  {  	struct urb *victim; +	unsigned long flags; -	spin_lock_irq(&anchor->lock); +	spin_lock_irqsave(&anchor->lock, flags);  	while (!list_empty(&anchor->urb_list)) {  		victim = list_entry(anchor->urb_list.prev, struct urb,  				    anchor_list); +		usb_get_urb(victim); +		spin_unlock_irqrestore(&anchor->lock, flags);  		/* this will unanchor the URB */  		usb_unlink_urb(victim); +		usb_put_urb(victim); +		spin_lock_irqsave(&anchor->lock, flags);  	} -	spin_unlock_irq(&anchor->lock); +	spin_unlock_irqrestore(&anchor->lock, flags);  }  EXPORT_SYMBOL_GPL(usb_unlink_anchored_urbs);  | 
