aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/core/devio.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
index 7513bb083c15..6585f527e381 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)
359 spin_lock_irqsave(&ps->lock, flags); 359 spin_lock_irqsave(&ps->lock, flags);
360 } 360 }
361 spin_unlock_irqrestore(&ps->lock, flags); 361 spin_unlock_irqrestore(&ps->lock, flags);
362 as = async_getcompleted(ps);
363 while (as) {
364 free_async(as);
365 as = async_getcompleted(ps);
366 }
367} 362}
368 363
369static void destroy_async_on_interface(struct dev_state *ps, 364static void destroy_async_on_interface(struct dev_state *ps,
@@ -643,6 +638,7 @@ static int usbdev_release(struct inode *inode, struct file *file)
643 struct dev_state *ps = file->private_data; 638 struct dev_state *ps = file->private_data;
644 struct usb_device *dev = ps->dev; 639 struct usb_device *dev = ps->dev;
645 unsigned int ifnum; 640 unsigned int ifnum;
641 struct async *as;
646 642
647 usb_lock_device(dev); 643 usb_lock_device(dev);
648 644
@@ -661,6 +657,12 @@ static int usbdev_release(struct inode *inode, struct file *file)
661 usb_unlock_device(dev); 657 usb_unlock_device(dev);
662 usb_put_dev(dev); 658 usb_put_dev(dev);
663 put_pid(ps->disc_pid); 659 put_pid(ps->disc_pid);
660
661 as = async_getcompleted(ps);
662 while (as) {
663 free_async(as);
664 as = async_getcompleted(ps);
665 }
664 kfree(ps); 666 kfree(ps);
665 return 0; 667 return 0;
666} 668}