diff options
author | Johan Hovold <johan@kernel.org> | 2017-01-03 10:40:01 -0500 |
---|---|---|
committer | Johan Hovold <johan@kernel.org> | 2017-01-04 04:43:56 -0500 |
commit | f09d1886a41e9063b43da493ef0e845ac8afd2fa (patch) | |
tree | 33df5e756d99a9172e9a2ab3acc60fcc39b204de /drivers/usb | |
parent | 76ab439ed1b68778e9059c79ecc5d14de76c89a8 (diff) |
USB: serial: quatech2: fix sleep-while-atomic in close
The write URB was being killed using the synchronous interface while
holding a spin lock in close().
Simply drop the lock and busy-flag update, something which would have
been taken care of by the completion handler if the URB was in flight.
Fixes: f7a33e608d9a ("USB: serial: add quatech2 usb to serial driver")
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Johan Hovold <johan@kernel.org>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/serial/quatech2.c | 4 |
1 files changed, 0 insertions, 4 deletions
diff --git a/drivers/usb/serial/quatech2.c b/drivers/usb/serial/quatech2.c index 659cb8606bd9..5709cc93b083 100644 --- a/drivers/usb/serial/quatech2.c +++ b/drivers/usb/serial/quatech2.c | |||
@@ -408,16 +408,12 @@ static void qt2_close(struct usb_serial_port *port) | |||
408 | { | 408 | { |
409 | struct usb_serial *serial; | 409 | struct usb_serial *serial; |
410 | struct qt2_port_private *port_priv; | 410 | struct qt2_port_private *port_priv; |
411 | unsigned long flags; | ||
412 | int i; | 411 | int i; |
413 | 412 | ||
414 | serial = port->serial; | 413 | serial = port->serial; |
415 | port_priv = usb_get_serial_port_data(port); | 414 | port_priv = usb_get_serial_port_data(port); |
416 | 415 | ||
417 | spin_lock_irqsave(&port_priv->urb_lock, flags); | ||
418 | usb_kill_urb(port_priv->write_urb); | 416 | usb_kill_urb(port_priv->write_urb); |
419 | port_priv->urb_in_use = false; | ||
420 | spin_unlock_irqrestore(&port_priv->urb_lock, flags); | ||
421 | 417 | ||
422 | /* flush the port transmit buffer */ | 418 | /* flush the port transmit buffer */ |
423 | i = usb_control_msg(serial->dev, | 419 | i = usb_control_msg(serial->dev, |