svn commit: r314343 - head/sys/compat/linux
Dmitry Chagin
dchagin at FreeBSD.org
Mon Feb 27 16:53:54 UTC 2017
Author: dchagin
Date: Mon Feb 27 16:53:52 2017
New Revision: 314343
URL: https://svnweb.freebsd.org/changeset/base/314343
Log:
Unify eventfd ioctl method and use it for other similar interfaces.
MFC after: 1 month
Modified:
head/sys/compat/linux/linux_event.c
Modified: head/sys/compat/linux/linux_event.c
==============================================================================
--- head/sys/compat/linux/linux_event.c Mon Feb 27 15:37:38 2017 (r314342)
+++ head/sys/compat/linux/linux_event.c Mon Feb 27 16:53:52 2017 (r314343)
@@ -177,7 +177,7 @@ static struct fileops timerfdops = {
.fo_read = timerfd_read,
.fo_write = invfo_rdwr,
.fo_truncate = invfo_truncate,
- .fo_ioctl = invfo_ioctl,
+ .fo_ioctl = eventfd_ioctl,
.fo_poll = timerfd_poll,
.fo_kqfilter = timerfd_kqfilter,
.fo_stat = timerfd_stat,
@@ -760,7 +760,7 @@ eventfd_read(struct file *fp, struct uio
mtx_lock(&efd->efd_lock);
retry:
if (efd->efd_count == 0) {
- if ((efd->efd_flags & LINUX_O_NONBLOCK) != 0) {
+ if ((fp->f_flag & FNONBLOCK) != 0) {
mtx_unlock(&efd->efd_lock);
return (EAGAIN);
}
@@ -811,7 +811,7 @@ eventfd_write(struct file *fp, struct ui
mtx_lock(&efd->efd_lock);
retry:
if (UINT64_MAX - efd->efd_count <= count) {
- if ((efd->efd_flags & LINUX_O_NONBLOCK) != 0) {
+ if ((fp->f_flag & FNONBLOCK) != 0) {
mtx_unlock(&efd->efd_lock);
/* Do not not return the number of bytes written */
uio->uio_resid += sizeof(eventfd_t);
@@ -927,19 +927,18 @@ static int
eventfd_ioctl(struct file *fp, u_long cmd, void *data,
struct ucred *active_cred, struct thread *td)
{
- struct eventfd *efd;
- efd = fp->f_data;
- if (fp->f_type != DTYPE_LINUXEFD || efd == NULL)
+ if (fp->f_data == NULL || (fp->f_type != DTYPE_LINUXEFD &&
+ fp->f_type != DTYPE_LINUXTFD))
return (EINVAL);
switch (cmd)
{
case FIONBIO:
- if (*(int *)data)
- efd->efd_flags |= LINUX_O_NONBLOCK;
+ if ((*(int *)data))
+ atomic_set_int(&fp->f_flag, FNONBLOCK);
else
- efd->efd_flags &= ~LINUX_O_NONBLOCK;
+ atomic_clear_int(&fp->f_flag, FNONBLOCK);
case FIOASYNC:
return (0);
default:
More information about the svn-src-all
mailing list