Hi,

it turns out that tty_open() calls close() even if open() has failed.
As this is undesireable for usb serial drivers, here's a patch
to deal with it.

John, does it fix the issue you reported?

        Regards
                Oliver
-- 

--- a/include/linux/usb/serial.h        2007-03-26 09:23:20.000000000 +0200
+++ b/include/linux/usb/serial.h        2007-03-26 09:27:12.000000000 +0200
@@ -92,6 +92,7 @@
        int                     open_count;
        char                    throttled;
        char                    throttle_req;
+       int                     cleaning_up;
        struct device           dev;
 };
 #define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev)
--- a/drivers/usb/serial/usb-serial.c   2007-03-26 09:18:08.000000000 +0200
+++ b/drivers/usb/serial/usb-serial.c   2007-03-26 09:28:14.000000000 +0200
@@ -235,6 +235,7 @@
        return 0;
 
 bailout_module_put:
+       ++port->cleaning_up;
        module_put(serial->type->driver.owner);
 bailout_mutex_unlock:
        port->open_count = 0;
@@ -257,6 +258,12 @@
 
        mutex_lock(&port->mutex);
 
+       if (port->cleaning_up) {
+               --port->cleaning_up;
+               mutex_unlock(&port->mutex);
+               return;
+       }
+
        if (port->open_count == 0) {
                mutex_unlock(&port->mutex);
                return;


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to