USB: serial: fix stalled writes
authorJohan Hovold <jhovold@gmail.com>
Wed, 4 Aug 2010 13:45:57 +0000 (15:45 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 10 Aug 2010 21:35:45 +0000 (14:35 -0700)
commitb58af4066d240b18b43f202e07b9ec7461d90b17
treea6f04122c5849383b0981d0a130bdf787788f1fa
parentb409214c683ed06c26e2cdad0be546ad11463354
USB: serial: fix stalled writes

As David VomLehn points out, it was possible to receive an interrupt
before clearing the free-urb flag which could lead to the urb being
incorrectly marked as busy.

For the same reason, move tx_bytes accounting so that it will never be
negative.

Note that the free-flags set and clear operations do not need any
additional locking as they are manipulated while USB_SERIAL_WRITE_BUSY
is set.

Reported-by: David VomLehn <dvomlehn@cisco.com>
Tested-by: David VomLehn <dvomlehn@cisco.com>
Signed-off-by: Johan Hovold <jhovold@gmail.com>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/serial/generic.c