RFC - bootscript error reporting
bryan at kadzban.is-a-geek.net
Thu Jan 29 19:34:33 PST 2004
Bill's LFS Login wrote:
> I only post conversationally at this time, as the wise thing is to get
> one of the guys who dabble in the kernel all the time to provide an
> answer. Not a lot of chance of that I think.
Well, I don't "dabble in the kernel all the time", but I can read source
fairly well. Or at least, I'd like to think so. ;-)
In any case, in fs/fifo.c there are these comments inside the VFS open()
function for fifos:
* POSIX.1 says that O_NONBLOCK means return with the FIFO
* opened, even when there is no process writing the FIFO.
* POSIX.1 says that O_NONBLOCK means return -1 with
* errno=ENXIO when there is no process reading the FIFO.
* POSIX.1 leaves this case "undefined" when O_NONBLOCK is set.
* This implementation will NEVER block on a O_RDWR open, since
* the process can at least talk to itself.
Now, this only applies to O_NONBLOCK. If O_NONBLOCK is not specified,
then an O_RDONLY open will wait_for_partner, and so will O_WRONLY. I
assume that wait_for_partner is what blocks, based on its name.
Opening the fifo with O_RDWR won't block in any case -- or at least,
it'll never call wait_for_partner directly.
This is from kernel 2.6.2-rc1. Take it with a grain of salt, because I
didn't look at every function that gets called to see if it can block.
But it looks like opening a fifo for writing will either block, or
return -1 and set errno to ENXIO until a reader is available (depending
on whether O_NONBLOCK is specified). In no case does it *appear* that
it'll do something like buffering writes.
More information about the lfs-dev