USB: pl2302: clean up error handling in open
authorJohan Hovold <jhovold@gmail.com>
Sun, 6 Nov 2011 18:06:35 +0000 (19:06 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 15 Nov 2011 18:43:30 +0000 (10:43 -0800)
Reorder urb submission and simply kill interrupt urb should read-urb
submission fail (rather than calling close).

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/serial/pl2303.c

index 506d1e930c3ed08308a4358ed96fd137ed6fb6d4..9fdc944ff48dfc8f5256ff9ff844917c3de6348b 100644 (file)
@@ -503,21 +503,20 @@ static int pl2303_open(struct tty_struct *tty, struct usb_serial_port *port)
        if (tty)
                pl2303_set_termios(tty, port, &tmp_termios);
 
-       dbg("%s - submitting read urb", __func__);
-       result = usb_serial_generic_submit_read_urb(port, GFP_KERNEL);
-       if (result) {
-               pl2303_close(port);
-               return result;
-       }
-
        dbg("%s - submitting interrupt urb", __func__);
        result = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
        if (result) {
                dev_err(&port->dev, "%s - failed submitting interrupt urb,"
                        " error %d\n", __func__, result);
-               pl2303_close(port);
                return result;
        }
+
+       result = usb_serial_generic_submit_read_urb(port, GFP_KERNEL);
+       if (result) {
+               usb_kill_urb(port->interrupt_in_urb);
+               return result;
+       }
+
        port->port.drain_delay = 256;
        return 0;
 }