[PATCH] ftdi_sio: fix kref leak

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Commit 4a90f09b20f4622dcbff1f0e1e6bae1704f8ad8c added kref stuff to
ftdi_sio, but missed tty_kref_put at one exit point in
ftdi_process_read.

Signed-off-by: Jim Paris <jim@xxxxxxxx>
---

On 2.6.28-rc6, I have an FTDI device sending data at 500 kbps.  When I
killed the process reading the data, I got something like this:

...
[54291.148306] drivers/usb/serial/ftdi_sio.c: ftdi_process_read - throttled
[54291.148308] drivers/usb/serial/ftdi_sio.c: ftdi_process_read - incomplete, 0 bytes processed, 512 remain
[54291.148310] drivers/usb/serial/ftdi_sio.c: ftdi_process_read - deferring remainder until unthrottled
...

After this, attempting to open the same /dev/ttyUSBx device forever
gives -EIO, even if this particular numbered device gets taken by
another driver.  A similar bug: http://lkml.org/lkml/2008/10/28/126

This patch fixes the problem on 2.6.28-rc6.  It's rebased to current git.

-jim

 drivers/usb/serial/ftdi_sio.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index ef6cfa5..c70a8f6 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -2030,7 +2030,7 @@ static void ftdi_process_read(struct work_struct *work)
 			spin_unlock_irqrestore(&priv->rx_lock, flags);
 			dbg("%s - deferring remainder until unthrottled",
 					__func__);
-			return;
+			goto out;
 		}
 		spin_unlock_irqrestore(&priv->rx_lock, flags);
 		/* if the port is closed stop trying to read */
-- 
1.6.0.6

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux