]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
hso: don't change the state of a closed port
authorJan Dumon <j.dumon@option.com>
Tue, 5 Jan 2010 04:51:28 +0000 (04:51 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 7 Jan 2010 08:43:45 +0000 (00:43 -0800)
Don't change the state of a port if it's not open. This fixes an issue where a
port sometimes has to be opened twice before data can be received.

Signed-off-by: Jan Dumon <j.dumon@option.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/usb/hso.c

index aba90e77e077a92d5d7c837cf9c211982727f4b8..fb1c5ac55c01f435bfe297d3f247f6efad2ae1cb 100644 (file)
@@ -1915,18 +1915,18 @@ static void intr_callback(struct urb *urb)
                        if (serial != NULL) {
                                D1("Pending read interrupt on port %d\n", i);
                                spin_lock(&serial->serial_lock);
-                               if (serial->rx_state == RX_IDLE) {
+                               if (serial->rx_state == RX_IDLE &&
+                                       serial->open_count > 0) {
                                        /* Setup and send a ctrl req read on
                                         * port i */
-                               if (!serial->rx_urb_filled[0]) {
+                                       if (!serial->rx_urb_filled[0]) {
                                                serial->rx_state = RX_SENT;
                                                hso_mux_serial_read(serial);
                                        } else
                                                serial->rx_state = RX_PENDING;
-
                                } else {
-                                       D1("Already pending a read on "
-                                          "port %d\n", i);
+                                       D1("Already a read pending on "
+                                          "port %d or port not open\n", i);
                                }
                                spin_unlock(&serial->serial_lock);
                        }