[PATCH] USB: fix omninet driver bug
authorGreg Kroah-Hartman <[email protected]>
Tue, 2 May 2006 06:44:45 +0000 (08:44 +0200)
committerGreg Kroah-Hartman <[email protected]>
Fri, 12 May 2006 18:58:10 +0000 (11:58 -0700)
I introduced this way back in 2.6.13 when adding the port lock logic.
This device talks out through different "ports" all at the same time, so
the lock logic was wrong, preventing any data from ever being sent
properly.

Thanks a lot to Bernhard Reiter <[email protected]> for being
patient and helping with debugging this.

Cc: Bernhard Reiter <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
drivers/usb/serial/omninet.c

index 4d40704dea2cf157d30673bdbae47f27844dc201..238033a87092fc841c7c6ac225ff921ec381139a 100644 (file)
@@ -257,14 +257,14 @@ static int omninet_write (struct usb_serial_port *port, const unsigned char *buf
                return (0);
        }
 
-       spin_lock(&port->lock);
-       if (port->write_urb_busy) {
-               spin_unlock(&port->lock);
+       spin_lock(&wport->lock);
+       if (wport->write_urb_busy) {
+               spin_unlock(&wport->lock);
                dbg("%s - already writing", __FUNCTION__);
                return 0;
        }
-       port->write_urb_busy = 1;
-       spin_unlock(&port->lock);
+       wport->write_urb_busy = 1;
+       spin_unlock(&wport->lock);
 
        count = (count > OMNINET_BULKOUTSIZE) ? OMNINET_BULKOUTSIZE : count;
 
@@ -283,7 +283,7 @@ static int omninet_write (struct usb_serial_port *port, const unsigned char *buf
        wport->write_urb->dev = serial->dev;
        result = usb_submit_urb(wport->write_urb, GFP_ATOMIC);
        if (result) {
-               port->write_urb_busy = 0;
+               wport->write_urb_busy = 0;
                err("%s - failed submitting write urb, error %d", __FUNCTION__, result);
        } else
                result = count;