aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/serial
diff options
context:
space:
mode:
authorOliver Neukum <oliver@neukum.org>2011-02-10 09:33:37 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2011-02-17 13:51:13 -0500
commit9a91aedca2f4ef24344b7cd8f56570e620fbe4d5 (patch)
treec62af4d5e6c493508b1ddb1b33efbca62a6f67f1 /drivers/usb/serial
parent16871dcac74c63227aa92e0012f3004a648c2062 (diff)
usb_wwan: fix error case in close()
The device never needs to be resumed in close(). But the counters must be balanced. As resumption can fail, but the counters must be balanced, use the _no_resume() version which cannot fail. Signed-off-by: Oliver Neukum <oneukum@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/serial')
-rw-r--r--drivers/usb/serial/usb_wwan.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
index fe5e48eb9693..817e6ff8de8b 100644
--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -424,6 +424,7 @@ int usb_wwan_open(struct tty_struct *tty, struct usb_serial_port *port)
424 spin_lock_irq(&intfdata->susp_lock); 424 spin_lock_irq(&intfdata->susp_lock);
425 portdata->opened = 1; 425 portdata->opened = 1;
426 spin_unlock_irq(&intfdata->susp_lock); 426 spin_unlock_irq(&intfdata->susp_lock);
427 /* this balances a get in the generic USB serial code */
427 usb_autopm_put_interface(serial->interface); 428 usb_autopm_put_interface(serial->interface);
428 429
429 return 0; 430 return 0;
@@ -450,7 +451,8 @@ void usb_wwan_close(struct usb_serial_port *port)
450 usb_kill_urb(portdata->in_urbs[i]); 451 usb_kill_urb(portdata->in_urbs[i]);
451 for (i = 0; i < N_OUT_URB; i++) 452 for (i = 0; i < N_OUT_URB; i++)
452 usb_kill_urb(portdata->out_urbs[i]); 453 usb_kill_urb(portdata->out_urbs[i]);
453 usb_autopm_get_interface(serial->interface); 454 /* balancing - important as an error cannot be handled*/
455 usb_autopm_get_interface_no_resume(serial->interface);
454 serial->interface->needs_remote_wakeup = 0; 456 serial->interface->needs_remote_wakeup = 0;
455 } 457 }
456} 458}