From: Joe Peterson It fixes a couple of issues with ttys in the stopped state. Signed-off-by: Joe Peterson Cc: Alan Cox Signed-off-by: Andrew Morton --- drivers/char/n_tty.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff -puN drivers/char/n_tty.c~fix-ixany-and-restart-after-signal-eg-ctrl-c-in-n_tty-line-discipline-update drivers/char/n_tty.c --- a/drivers/char/n_tty.c~fix-ixany-and-restart-after-signal-eg-ctrl-c-in-n_tty-line-discipline-update +++ a/drivers/char/n_tty.c @@ -695,14 +695,16 @@ static inline void n_tty_receive_char(st return; } - if (tty->stopped && !tty->flow_stopped && I_IXON(tty) && I_IXANY(tty)) - start_tty(tty); - if (I_ISTRIP(tty)) c &= 0x7f; if (I_IUCLC(tty) && L_IEXTEN(tty)) c=tolower(c); + if (tty->stopped && !tty->flow_stopped && I_IXON(tty) && + ((I_IXANY(tty) && c != START_CHAR(tty) && c != STOP_CHAR(tty)) || + c == INTR_CHAR(tty) || c == QUIT_CHAR(tty))) + start_tty(tty); + if (tty->closing) { if (I_IXON(tty)) { if (c == START_CHAR(tty)) @@ -766,8 +768,6 @@ static inline void n_tty_receive_char(st signal = SIGTSTP; if (c == SUSP_CHAR(tty)) { send_signal: - if (tty->stopped && !tty->flow_stopped && I_IXON(tty)) - start_tty(tty); /* * Echo character, and then send the signal. * Note that we do not use isig() here because we want _