Re: [patch/rfc] Make poll/select report error (POLLNVAL and EBADF)for unsupported files

From: Davide Libenzi
Date: Mon Feb 15 2010 - 12:50:34 EST


On Mon, 15 Feb 2010, Eric Dumazet wrote:

> Le dimanche 14 fÃvrier 2010 Ã 14:27 -0800, Davide Libenzi a Ãcrit :
> > Currently poll and select consider a non poll-supported file as one with
> > full event mask set, instead of reporting proper error to the caller.
> > This behavior can fool the caller of proper functionality being returned,
> > while instead no valid event was processed/read from the device.
> > This came out linked to this bug report:
> >
> > http://bugzilla.kernel.org/show_bug.cgi?id=15272
> >
> > IMHO, it'd be more adequate to report proper error code, for files that do
> > not support f_op->poll(), but then I am also not sure how much breakage
> > can this bring to existing (already broken "in just the right way")
> > applications.
> > Untested, discussion-only, patch.
> >
> >
> > Signed-off-by: Davide Libenzi <davidel@xxxxxxxxxxxxxxx>
> >
> >
> > - Davide
>
> Hmm, according to POSIX :
>
> The poll() function shall support regular files, terminal and
> pseudo-terminal devices, FIFOs, pipes, sockets ...
>
> Regular files shall always poll TRUE for reading and writing.
>
>
> So unless I missed something, this patch could break some conformant
> applications.

If that's POSIX, than the patch is no good. I missed the part on the
regular files being always ready, which explaqins why the code is as it is
right now.


> In particular, if an application is polling() on stdin (usually a tty),
> and other 'files', what's happening if we do :
>
> cat replay_file | application
>
> Either it wont read stdin, or application exits without reading its
> input.

That case would be fine, since that's a pipe.
This will behave differently:

$ application < replay_file

Anyway, since POSIX states the above, the patch cannot apply.


- Davide