• P
    tty: Prepare for destroying line discipline on hangup · e55afd11
    Peter Hurley 提交于
    tty file_operations (read/write/ioctl) wait for the ldisc reference
    indefinitely (until ldisc lifetime events, such as hangup or TIOCSETD,
    finish). Since hangup now destroys the ldisc and does not instance
    another copy, file_operations must now be prepared to receive a NULL
    ldisc reference from tty_ldisc_ref_wait():
    
    CPU 0                                   CPU 1
    -----                                   -----
    (*f_op->read)() => tty_read()
                                            __tty_hangup()
                                            ...
                                            f_op = &hung_up_tty_fops;
                                            ...
                                            tty_ldisc_hangup()
                                               tty_ldisc_lock()
                                               tty_ldisc_kill()
                                                  tty->ldisc = NULL
                                               tty_ldisc_unlock()
    ld = tty_ldisc_ref_wait()
    /* ld == NULL */
    
    Instead, the action taken now is to return the same value as if the
    tty had been hungup a moment earlier:
    
    CPU 0                                   CPU 1
    -----                                   -----
                                            __tty_hangup()
                                            ...
                                            f_op = &hung_up_tty_fops;
    (*f_op->read)() => hung_up_tty_read()
    return 0;
                                            ...
                                            tty_ldisc_hangup()
                                               tty_ldisc_lock()
                                               tty_ldisc_kill()
                                                  tty->ldisc = NULL
                                               tty_ldisc_unlock()
    Signed-off-by: NPeter Hurley <peter@hurleysoftware.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    e55afd11
tty_io.c 90.0 KB