diff options
| -rw-r--r-- | drivers/tty/tty_ldisc.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c index 2fe216b276e2..84a8ac2a779f 100644 --- a/drivers/tty/tty_ldisc.c +++ b/drivers/tty/tty_ldisc.c | |||
| @@ -694,10 +694,8 @@ int tty_ldisc_reinit(struct tty_struct *tty, int disc) | |||
| 694 | tty_set_termios_ldisc(tty, disc); | 694 | tty_set_termios_ldisc(tty, disc); |
| 695 | retval = tty_ldisc_open(tty, tty->ldisc); | 695 | retval = tty_ldisc_open(tty, tty->ldisc); |
| 696 | if (retval) { | 696 | if (retval) { |
| 697 | if (!WARN_ON(disc == N_TTY)) { | 697 | tty_ldisc_put(tty->ldisc); |
| 698 | tty_ldisc_put(tty->ldisc); | 698 | tty->ldisc = NULL; |
| 699 | tty->ldisc = NULL; | ||
| 700 | } | ||
| 701 | } | 699 | } |
| 702 | return retval; | 700 | return retval; |
| 703 | } | 701 | } |
| @@ -752,8 +750,9 @@ void tty_ldisc_hangup(struct tty_struct *tty, bool reinit) | |||
| 752 | 750 | ||
| 753 | if (tty->ldisc) { | 751 | if (tty->ldisc) { |
| 754 | if (reinit) { | 752 | if (reinit) { |
| 755 | if (tty_ldisc_reinit(tty, tty->termios.c_line) < 0) | 753 | if (tty_ldisc_reinit(tty, tty->termios.c_line) < 0 && |
| 756 | tty_ldisc_reinit(tty, N_TTY); | 754 | tty_ldisc_reinit(tty, N_TTY) < 0) |
| 755 | WARN_ON(tty_ldisc_reinit(tty, N_NULL) < 0); | ||
| 757 | } else | 756 | } else |
| 758 | tty_ldisc_kill(tty); | 757 | tty_ldisc_kill(tty); |
| 759 | } | 758 | } |
