If the tty drivers buffer fills, we don't sleep in tty->driver->write,
but we return zero instead. If we are in non-blocking mode, and we
haven't written any characters, we return -EAGAIN. If we have, we
return the number of characters which the tty driver accepted.
However, the problem you are referring to is what happens if you have
a blocking process blocked in write_chan() in n_tty.c, and we have
a non-blocking process trying to write to the same tty.
Reading POSIX, it doesn't seem to be clear about our area of interest,
and I'd even say that it seems to be unspecified.
What are the pipe semantics in this case? According to my reading of
POSIX write(), if you have a blocked non-blocking writer, a non-blocking
writer should receive EAGAIN. It would seem sensible to apply the
same rules to terminal devices as well as pipes.
-- Russell King (rmk@arm.linux.org.uk) The developer of ARM Linux http://www.arm.linux.org.uk/personal/aboutme.html- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/