On 11/27/2010 10:43 AM, Jiri Slaby wrote: > On 11/27/2010 09:50 AM, Jiri Slaby wrote: >> On 11/27/2010 03:59 AM, Kyle McMartin wrote: >>> I'm poking around to see, I think maybe something might be dropping >>> locks in the callchain that gives us a window where this might be >>> possible... >> >> Of course, that's the case: >> clear_bit(TTY_LDISC, &tty->flags); >> tty_unlock(); >> cancel_delayed_work_sync(&tty->buf.work); >> mutex_unlock(&tty->ldisc_mutex); >> >> tty_lock(); >> mutex_lock(&tty->ldisc_mutex); >> >> in tty_ldisc_hangup. Hence my point 1) from previous posts doesn't hold too: >> 1) __tty_hangup from tty_ldisc_hangup to tty_ldisc_enable. During this >> section tty_lock is held. >> >> I will check, how to fix this. > > Reproducible with 2 running processes from the attachment. Is it fixed with the attached proof-of-concept patch? So you need: THIS ONE TTY: don't allow reopen when ldisc is changing TTY: ldisc, fix open flag handling Char: TTY, restore tty_ldisc_wait_idle The last one is in 2.6.37-rc2 already. thanks, -- js suse labs