TTY: ldisc, move wait idle to caller
authorJiri Slaby <[email protected]>
Wed, 16 Nov 2011 15:27:08 +0000 (16:27 +0100)
committerGreg Kroah-Hartman <[email protected]>
Thu, 17 Nov 2011 19:36:12 +0000 (11:36 -0800)
It is the only place where reinit is called from. And we really need
to wait for the old ldisc to go once. Actually this is the place where
the waiting originally was (before removed and re-added later).

This will make the fix in the following patch easier to implement.

Signed-off-by: Jiri Slaby <[email protected]>
Cc: Dave Young <[email protected]>
Cc: Dave Jones <[email protected]>
Cc: Ben Hutchings <[email protected]>
Cc: Dmitriy Matrosov <[email protected]>
Cc: Alan Cox <[email protected]>
Cc: stable <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
drivers/tty/tty_ldisc.c

index 534d176a78edf3192fc8560b25d16d8d419a4155..a69a755035b60a29b25783be032eae962286269a 100644 (file)
@@ -763,8 +763,6 @@ static int tty_ldisc_reinit(struct tty_struct *tty, int ldisc)
        if (IS_ERR(ld))
                return -1;
 
-       WARN_ON_ONCE(tty_ldisc_wait_idle(tty, 5 * HZ));
-
        tty_ldisc_close(tty, tty->ldisc);
        tty_ldisc_put(tty->ldisc);
        tty->ldisc = NULL;
@@ -848,6 +846,8 @@ void tty_ldisc_hangup(struct tty_struct *tty)
           it means auditing a lot of other paths so this is
           a FIXME */
        if (tty->ldisc) {       /* Not yet closed */
+               WARN_ON_ONCE(tty_ldisc_wait_idle(tty, 5 * HZ));
+
                if (reset == 0) {
 
                        if (!tty_ldisc_reinit(tty, tty->termios->c_line))