Comment 259 for bug 554172

Revision history for this message
Scott James Remnant (Canonical) (canonical-scott) wrote : Re: system services not starting at boot

> Though open(2) does indeed not document this error, it is a documented
> POSIX return and it has been possible that this could get returned on
> open for a TTY for a very long time.
>
No it isn't, the current and previous editions of POSIX don't document EIO as a return for open() - are you sure you're not reading the XSI STREAMS specification? :-) That being said, as I discussed above, open() has always apparently returned EIO in Linux for other reasons. We should probably make sure this is documented.

> Yes EIO is not a very intuitive
> return but actually they chose a different return code as it does indeed
> indicate something different than an EAGAIN might. EGAIN generally meaning
> "just do it again" and EIO meaning "this is stuck closing at the moment".
>
The problem is that EIO is *already* returned from open() to mean "omg, the filesystem/block device is on fire! stop! stop! stop!"

> It seems that this is predicated only on your dislike of EIO as a return.
>
No! You dangerously misunderstand.

This is predicated on my discovery that open() can already return EIO for different errors that are catastrophic, and thus code that loops on EIO isn't possible. A different error would mean we could retry in userspace - right now the only option is to fail.