On Wed, Sep 02, 2020 at 12:21:27PM +0200, Christian Brauner wrote: > Introduce PIDFD_NONBLOCK to support non-blocking pidfd file descriptors. > > Ever since the introduction of pidfds and more advanced async io various > programming languages such as Rust have grown support for async event > libraries. These libraries are created to help build epoll-based event loops > around file descriptors. A common pattern is to automatically make all file > descriptors they manage to O_NONBLOCK. > > For such libraries the EAGAIN error code is treated specially. When a function > is called that returns EAGAIN the function isn't called again until the event > loop indicates the the file descriptor is ready. Supporting EAGAIN when > waiting on pidfds makes such libraries just work with little effort. In the > following patch we will extend waitid() internally to support non-blocking > pidfds. > > This introduces a new flag PIDFD_NONBLOCK that is equivalent to O_NONBLOCK. > This follows the same patterns we have for other (anon inode) file descriptors > such as EFD_NONBLOCK, IN_NONBLOCK, SFD_NONBLOCK, TFD_NONBLOCK and the same for > close-on-exec flags. > > Link: https://lore.kernel.org/lkml/20200811181236.GA18763@localhost/ > Link: https://github.com/joshtriplett/async-pidfd > Cc: Kees Cook <keescook@xxxxxxxxxxxx> > Cc: Sargun Dhillon <sargun@xxxxxxxxx> > Cc: Oleg Nesterov <oleg@xxxxxxxxxx> > Suggested-by: Josh Triplett <josh@xxxxxxxxxxxxxxxx> > Signed-off-by: Christian Brauner <christian.brauner@xxxxxxxxxx> Reviewed-by: Josh Triplett <josh@xxxxxxxxxxxxxxxx>