|
@@ -527,19 +527,16 @@ static int tty_ldisc_failto(struct tty_struct *tty, int ld)
|
|
|
static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old)
|
|
|
{
|
|
|
/* There is an outstanding reference here so this is safe */
|
|
|
- old = tty_ldisc_get(tty, old->ops->num);
|
|
|
- WARN_ON(IS_ERR(old));
|
|
|
- tty->ldisc = old;
|
|
|
- tty_set_termios_ldisc(tty, old->ops->num);
|
|
|
- if (tty_ldisc_open(tty, old) < 0) {
|
|
|
- tty_ldisc_put(old);
|
|
|
+ if (tty_ldisc_failto(tty, old->ops->num) < 0) {
|
|
|
+ const char *name = tty_name(tty);
|
|
|
+
|
|
|
+ pr_warn("Falling back ldisc for %s.\n", name);
|
|
|
/* The traditional behaviour is to fall back to N_TTY, we
|
|
|
want to avoid falling back to N_NULL unless we have no
|
|
|
choice to avoid the risk of breaking anything */
|
|
|
if (tty_ldisc_failto(tty, N_TTY) < 0 &&
|
|
|
tty_ldisc_failto(tty, N_NULL) < 0)
|
|
|
- panic("Couldn't open N_NULL ldisc for %s.",
|
|
|
- tty_name(tty));
|
|
|
+ panic("Couldn't open N_NULL ldisc for %s.", name);
|
|
|
}
|
|
|
}
|
|
|
|