summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorVinayak Pane <vpane@nvidia.com>2012-02-26 17:32:13 -0800
committerSimone Willett <swillett@nvidia.com>2012-04-16 14:11:20 -0700
commit99cea7ab4b7db1ad597712fac491488f9845b99f (patch)
tree1f2bec378884c77c76a29536f941b80be594ff34 /drivers
parentaad4aa9c898e742e4c24493169766ed435eb18f7 (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.c4
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)"