Re: [RESEND][RFC PATCH v2] waitfd

From: Casey Dahlin
Date: Sat Jan 10 2009 - 17:37:34 EST


Oleg Nesterov wrote:
On 01/10, Casey Dahlin wrote:
Scott James Remnant wrote:
On Wed, 2009-01-07 at 18:19 +0100, Oleg Nesterov wrote:

Please note that unlike other sys_...fd() syscalls, sys_waitfd()
doesn't allow to pass O_CLOEXEC. Looks like we need a separate
"flags" argument...

Also, ioctl(FIONBIO) or fcntl(O_NONBLOCK) have no effect on
waitfd, not very good.

I'd suggest to remove WNOHANG from waitfd_ctx->ops and treat
(->f_flags & O_NONBLOCK) as WNOHANG.

(can't resist, ->ops is not the best name ;)


Definitely agree here, waitfd() doesn't need WNOHANG - we already have
ONONBLOCK.

That also solves one of the strangest behaves of waitid when you use
WNOHANG (it returns zero and you have to check whether it changed the
struct), now you just read() - if no child you get EAGAIN, if a child
you read a struct.

From the perspective of waitfd, the only difference between WNOHANG and
O_NONBLOCK is which argument you put the flags in.

No. Please see the note about ioctl/fcntl above.

Oleg.
Yes but the actual waitfd call could simply set O_NONBLOCK on the descriptor when it receive WNOHANG in the flags, and read the descriptor flags going forward.

--CJD
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/