As noted by Jiri, tty_ldisc_reinit() shouldn't rely on tty counter. Simplify math by increasing the counter after reinit success.
Cc: Greg Kroah-Hartman <[email protected]> Cc: Jiri Slaby <[email protected]> Link: lkml.kernel.org/r/<[email protected]> Suggested-by: Jiri Slaby <[email protected]> Signed-off-by: Dmitry Safonov <[email protected]> --- drivers/tty/tty_io.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index a947719b4626..7f968ac14bbd 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -1268,17 +1268,13 @@ static int tty_reopen(struct tty_struct *tty) return -EBUSY; tty_ldisc_lock(tty, MAX_SCHEDULE_TIMEOUT); + if (!tty->ldisc) + retval = tty_ldisc_reinit(tty, tty->termios.c_line); + tty_ldisc_unlock(tty); - tty->count++; - if (tty->ldisc) - goto out_unlock; + if (retval == 0) + tty->count++; - retval = tty_ldisc_reinit(tty, tty->termios.c_line); - if (retval) - tty->count--; - -out_unlock: - tty_ldisc_unlock(tty); return retval; } -- 2.13.6

