diff --git a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c index 17edc057a311..51359815432a 100644 --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c @@ -301,11 +301,19 @@ static void serial_port_shutdown(struct tty_port *tport) struct usb_serial_port *port = container_of(tport, struct usb_serial_port, port); struct usb_serial_driver *drv = port->serial->type; + struct usb_serial *serial = port->serial; + + mutex_lock(&serial->disc_mutex); + if (serial->disconnected) { + mutex_unlock(&serial->disc_mutex); + return; + } if (drv->close) drv->close(port); usb_autopm_put_interface(port->serial->interface); + mutex_unlock(&serial->disc_mutex); } static void serial_hangup(struct tty_struct *tty)