diff options
| -rw-r--r-- | drivers/char/tty_ldisc.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/char/tty_ldisc.c b/drivers/char/tty_ldisc.c index aafdbaebc16a..feb55075819b 100644 --- a/drivers/char/tty_ldisc.c +++ b/drivers/char/tty_ldisc.c | |||
| @@ -518,7 +518,7 @@ static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old) | |||
| 518 | static int tty_ldisc_halt(struct tty_struct *tty) | 518 | static int tty_ldisc_halt(struct tty_struct *tty) |
| 519 | { | 519 | { |
| 520 | clear_bit(TTY_LDISC, &tty->flags); | 520 | clear_bit(TTY_LDISC, &tty->flags); |
| 521 | return cancel_delayed_work(&tty->buf.work); | 521 | return cancel_delayed_work_sync(&tty->buf.work); |
| 522 | } | 522 | } |
| 523 | 523 | ||
| 524 | /** | 524 | /** |
| @@ -756,12 +756,9 @@ void tty_ldisc_hangup(struct tty_struct *tty) | |||
| 756 | * N_TTY. | 756 | * N_TTY. |
| 757 | */ | 757 | */ |
| 758 | if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) { | 758 | if (tty->driver->flags & TTY_DRIVER_RESET_TERMIOS) { |
| 759 | /* Make sure the old ldisc is quiescent */ | ||
| 760 | tty_ldisc_halt(tty); | ||
| 761 | flush_scheduled_work(); | ||
| 762 | |||
| 763 | /* Avoid racing set_ldisc or tty_ldisc_release */ | 759 | /* Avoid racing set_ldisc or tty_ldisc_release */ |
| 764 | mutex_lock(&tty->ldisc_mutex); | 760 | mutex_lock(&tty->ldisc_mutex); |
| 761 | tty_ldisc_halt(tty); | ||
| 765 | if (tty->ldisc) { /* Not yet closed */ | 762 | if (tty->ldisc) { /* Not yet closed */ |
| 766 | /* Switch back to N_TTY */ | 763 | /* Switch back to N_TTY */ |
| 767 | tty_ldisc_reinit(tty); | 764 | tty_ldisc_reinit(tty); |
