---
 drivers/usb/serial/console.c    |    3 ++-
 drivers/usb/serial/usb-serial.c |    6 ++++--
 include/linux/usb/serial.h      |    1 +
 3 files changed, 7 insertions(+), 3 deletions(-)

--- upstream.orig/drivers/usb/serial/console.c	2007-11-12 14:38:12.000000000 -0500
+++ upstream/drivers/usb/serial/console.c	2007-11-12 15:04:35.000000000 -0500
@@ -192,8 +192,9 @@ static int usb_console_setup(struct cons
 		kfree (termios);
 		kfree (tty);
 	}
+	port->console = 1;
 
-	return retval;
+	return 0;
 }
 
 static void usb_console_write(struct console *co, const char *buf, unsigned count)
--- upstream.orig/drivers/usb/serial/usb-serial.c	2007-11-12 14:37:28.000000000 -0500
+++ upstream/drivers/usb/serial/usb-serial.c	2007-11-12 14:42:38.000000000 -0500
@@ -264,19 +264,21 @@ static void serial_close(struct tty_stru
 	}
 
 	--port->open_count;
-	if (port->open_count == 0) {
+	if (port->open_count == 0)
 		/* only call the device specific close if this 
 		 * port is being closed by the last owner */
 		port->serial->type->close(port, filp);
 
+	if (port->open_count == (port->console? 1 : 0)) {
 		if (port->tty) {
 			if (port->tty->driver_data)
 				port->tty->driver_data = NULL;
 			port->tty = NULL;
 		}
+	}
 
+	if (port->open_count == 0)
 		module_put(port->serial->type->driver.owner);
-	}
 
 	mutex_unlock(&port->mutex);
 	usb_serial_put(port->serial);
--- upstream.orig/include/linux/usb/serial.h	2007-11-12 14:37:28.000000000 -0500
+++ upstream/include/linux/usb/serial.h	2007-11-12 14:42:38.000000000 -0500
@@ -92,6 +92,7 @@ struct usb_serial_port {
 	int			open_count;
 	char			throttled;
 	char			throttle_req;
+	char			console;
 	struct device		dev;
 };
 #define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev)
