From ddd46d3eecada1bc2f32cd7d7245846c699ab51a Mon Sep 17 00:00:00 2001 From: dchagin Date: Sat, 2 Apr 2016 06:15:14 +0000 Subject: [PATCH] MFC r297296: Implement O_NONBLOCK flag via fcntl(F_SETFL) for eventfd object. git-svn-id: svn://svn.freebsd.org/base/stable/10@297502 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- sys/compat/linux/linux_event.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/sys/compat/linux/linux_event.c b/sys/compat/linux/linux_event.c index 1fe34457e..a089d4383 100644 --- a/sys/compat/linux/linux_event.c +++ b/sys/compat/linux/linux_event.c @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -868,8 +869,24 @@ static int eventfd_ioctl(struct file *fp, u_long cmd, void *data, struct ucred *active_cred, struct thread *td) { + struct eventfd *efd; - return (ENXIO); + efd = fp->f_data; + if (fp->f_type != DTYPE_LINUXEFD || efd == NULL) + return (EINVAL); + + switch (cmd) + { + case FIONBIO: + if (*(int *)data) + efd->efd_flags |= LINUX_O_NONBLOCK; + else + efd->efd_flags &= ~LINUX_O_NONBLOCK; + case FIOASYNC: + return (0); + default: + return (ENXIO); + } } /*ARGSUSED*/ -- 2.45.0