I have two processes with the same tty open, one opens blocking and one opens nonblocking.
If the blocking process blocks doing a write (due to flow control, just going to fast, etc...) the nonblocking process will also block when it writes until the blocking process unblocks. This seems to occur because do_tty_write() isn't checking for O_NONBLOCK when taking the tty's write mutex. Signed-off-by: Dave Johnson <[EMAIL PROTECTED]> ===== drivers/char/tty_io.c 1.237 vs edited ===== --- 1.237/drivers/char/tty_io.c 2007-03-18 16:40:06 -04:00 +++ edited/drivers/char/tty_io.c 2007-05-01 10:53:27 -04:00 @@ -1690,9 +1690,13 @@ ssize_t ret = 0, written = 0; unsigned int chunk; - /* FIXME: O_NDELAY ... */ - if (mutex_lock_interruptible(&tty->atomic_write_lock)) { - return -ERESTARTSYS; + if (file->f_flags & O_NONBLOCK) { + if (!mutex_trylock(&tty->atomic_write_lock)) + return -EAGAIN; + } + else { + if (mutex_lock_interruptible(&tty->atomic_write_lock)) + return -ERESTARTSYS; } /* - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/