Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ae030e435f5400cff77c52506a8d3d7278f0947c
Commit:     ae030e435f5400cff77c52506a8d3d7278f0947c
Parent:     55c0d1f83e481dd6c77f52f7dcfeb043b8b740fa
Author:     Paul Fulghum <[EMAIL PROTECTED]>
AuthorDate: Wed May 9 02:33:38 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Wed May 9 12:30:49 2007 -0700

    tty_set_ldisc() receive_room fix
    
    Fix tty_set_ldisc in tty_io.c so that tty->receive_room is only cleared if
    actually changing line disciplines.
    
    Without this fix a problem occurs when requesting the line discipline to
    change to the same line discipline.  In this case tty->receive_room is
    cleared but ldisc->open() is not called to set tty->receive_room back to a
    sane value.  The result is that tty->receive_room is stuck at 0 preventing
    the tty flip buffer from passing receive data to the line discipline.
    
    For example: a switch from N_TTY to N_TTY followed by a select() call for
    read input results in data never being received because tty->receive_room
    is stuck at zero.
    
    A switch from N_TTY to N_TTY followed by a read() call works because the
    read() call itself sets tty->receive_room correctly (but select does not).
    
    Previously (< 2.6.18) this was not a problem because the tty flip buffer
    pushed data to the line discipline without regard for tty->receive room.
    
    Signed-off-by: Paul Fulghum <[EMAIL PROTECTED]>
    Acked-by: Alan Cox <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 drivers/char/tty_io.c |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
index 7710a6a..bf5a001 100644
--- a/drivers/char/tty_io.c
+++ b/drivers/char/tty_io.c
@@ -934,13 +934,6 @@ restart:
                return -EINVAL;
 
        /*
-        *      No more input please, we are switching. The new ldisc
-        *      will update this value in the ldisc open function
-        */
-
-       tty->receive_room = 0;
-
-       /*
         *      Problem: What do we do if this blocks ?
         */
 
@@ -951,6 +944,13 @@ restart:
                return 0;
        }
 
+       /*
+        *      No more input please, we are switching. The new ldisc
+        *      will update this value in the ldisc open function
+        */
+
+       tty->receive_room = 0;
+
        o_ldisc = tty->ldisc;
        o_tty = tty->link;
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to