diff options
author | Vinayak Pane <vpane@nvidia.com> | 2012-02-26 17:32:13 -0800 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-04-16 14:11:20 -0700 |
commit | 99cea7ab4b7db1ad597712fac491488f9845b99f (patch) | |
tree | 1f2bec378884c77c76a29536f941b80be594ff34 /drivers | |
parent | aad4aa9c898e742e4c24493169766ed435eb18f7 (diff) |
usb: cdc-acm: fix anchored urb leak
Anchored urbs needs to put ref count after unanchoring
them at resume.
Bug 944250
Signed-off-by: Vinayak Pane <vpane@nvidia.com>
Reviewed-on: http://git-master/r/86015
(cherry picked from commit eb88ad392bdc05ce216d6adeec54c4f4856ec78a)
Change-Id: I7e5413fb8866db9a15da57166402cb567f07391a
Reviewed-on: http://git-master/r/96333
Tested-by: Vinayak Pane <vpane@nvidia.com>
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Steve Lin <stlin@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/usb/class/cdc-acm.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index a06f2cdc6106..335fe0504721 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c @@ -204,6 +204,8 @@ static int acm_write_start(struct acm *acm, int wbn) usb_mark_last_busy(acm->dev); #ifdef CONFIG_PM while ((res = usb_get_from_anchor(&acm->deferred))) { + /* decrement ref count*/ + usb_put_urb(res); rc = usb_submit_urb(res, GFP_ATOMIC); if (rc < 0) { dbg("usb_submit_urb(pending request) failed: %d", rc); @@ -1425,6 +1427,8 @@ static int acm_resume(struct usb_interface *intf) spin_lock_irq(&acm->write_lock); #ifdef CONFIG_PM while ((res = usb_get_from_anchor(&acm->deferred))) { + /* decrement ref count*/ + usb_put_urb(res); rv = usb_submit_urb(res, GFP_ATOMIC); if (rv < 0) { dbg("usb_submit_urb(pending request)" |