diff options
Diffstat (limited to 'drivers/usb/core/devio.c')
| -rw-r--r-- | drivers/usb/core/devio.c | 12 | 
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c index 7513bb083c1..6585f527e38 100644 --- a/drivers/usb/core/devio.c +++ b/drivers/usb/core/devio.c @@ -359,11 +359,6 @@ static void destroy_async(struct dev_state *ps, struct list_head *list)  		spin_lock_irqsave(&ps->lock, flags);  	}  	spin_unlock_irqrestore(&ps->lock, flags); -	as = async_getcompleted(ps); -	while (as) { -		free_async(as); -		as = async_getcompleted(ps); -	}  }  static void destroy_async_on_interface(struct dev_state *ps, @@ -643,6 +638,7 @@ static int usbdev_release(struct inode *inode, struct file *file)  	struct dev_state *ps = file->private_data;  	struct usb_device *dev = ps->dev;  	unsigned int ifnum; +	struct async *as;  	usb_lock_device(dev); @@ -661,6 +657,12 @@ static int usbdev_release(struct inode *inode, struct file *file)  	usb_unlock_device(dev);  	usb_put_dev(dev);  	put_pid(ps->disc_pid); + +	as = async_getcompleted(ps); +	while (as) { +		free_async(as); +		as = async_getcompleted(ps); +	}  	kfree(ps);  	return 0;  }  | 
