diff options
Diffstat (limited to 'drivers/tty/tty_ldisc.c')
| -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)  	tty_set_termios_ldisc(tty, disc);  	retval = tty_ldisc_open(tty, tty->ldisc);  	if (retval) { -		if (!WARN_ON(disc == N_TTY)) { -			tty_ldisc_put(tty->ldisc); -			tty->ldisc = NULL; -		} +		tty_ldisc_put(tty->ldisc); +		tty->ldisc = NULL;  	}  	return retval;  } @@ -752,8 +750,9 @@ void tty_ldisc_hangup(struct tty_struct *tty, bool reinit)  	if (tty->ldisc) {  		if (reinit) { -			if (tty_ldisc_reinit(tty, tty->termios.c_line) < 0) -				tty_ldisc_reinit(tty, N_TTY); +			if (tty_ldisc_reinit(tty, tty->termios.c_line) < 0 && +			    tty_ldisc_reinit(tty, N_TTY) < 0) +				WARN_ON(tty_ldisc_reinit(tty, N_NULL) < 0);  		} else  			tty_ldisc_kill(tty);  	} |