svn commit: r316298 - stable/11/sys/compat/linux
Dmitry Chagin
dchagin at FreeBSD.org
Thu Mar 30 20:09:50 UTC 2017
Author: dchagin
Date: Thu Mar 30 20:09:49 2017
New Revision: 316298
URL: https://svnweb.freebsd.org/changeset/base/316298
Log:
MFC r314343:
Unify eventfd ioctl method and use it for other similar interfaces.
Modified:
stable/11/sys/compat/linux/linux_event.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/compat/linux/linux_event.c
==============================================================================
--- stable/11/sys/compat/linux/linux_event.c Thu Mar 30 20:08:25 2017 (r316297)
+++ stable/11/sys/compat/linux/linux_event.c Thu Mar 30 20:09:49 2017 (r316298)
@@ -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-stable
mailing list