diff options
Diffstat (limited to 'drivers/usb/serial')
-rw-r--r-- | drivers/usb/serial/console.c | 3 | ||||
-rw-r--r-- | drivers/usb/serial/usb-serial.c | 6 |
2 files changed, 6 insertions, 3 deletions
diff --git a/drivers/usb/serial/console.c b/drivers/usb/serial/console.c index 72ab3bbf0f2..04007c31d88 100644 --- a/drivers/usb/serial/console.c +++ b/drivers/usb/serial/console.c @@ -192,8 +192,9 @@ static int usb_console_setup(struct console *co, char *options) kfree (termios); kfree (tty); } + port->console = 1; - return retval; + return 0; } static void usb_console_write(struct console *co, const char *buf, unsigned count) diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 497e29a700c..5c33e2471be 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c @@ -264,19 +264,21 @@ static void serial_close(struct tty_struct *tty, struct file * filp) } --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); |