diff options
Diffstat (limited to 'drivers/usb/class')
| -rw-r--r-- | drivers/usb/class/cdc-wdm.c | 6 | 
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c index c553decb5461..c8262e2f2917 100644 --- a/drivers/usb/class/cdc-wdm.c +++ b/drivers/usb/class/cdc-wdm.c @@ -485,6 +485,7 @@ out_free_mem:  static int service_outstanding_interrupt(struct wdm_device *desc)  {  	int rv = 0; +	int used;  	/* submit read urb only if the device is waiting for it */  	if (!desc->resp_count || !--desc->resp_count) @@ -499,7 +500,10 @@ static int service_outstanding_interrupt(struct wdm_device *desc)  		goto out;  	} -	set_bit(WDM_RESPONDING, &desc->flags); +	used = test_and_set_bit(WDM_RESPONDING, &desc->flags); +	if (used) +		goto out; +  	spin_unlock_irq(&desc->iuspin);  	rv = usb_submit_urb(desc->response, GFP_KERNEL);  	spin_lock_irq(&desc->iuspin);  |