Re: [PATCH] epoll: add exclusive wakeups flag

From: Michael Kerrisk (man-pages)
Date: Thu Mar 10 2016 - 14:47:25 EST


Hi Jason,

> Ok, here's some updated text:
>
> EPOLLEXCLUSIVE
>
> Sets an exclusive wakeup mode for the epfd file descriptor that is being
> attached to the target file descriptor, fd. When a wakeup event occurs
> and multiple epfd file descriptors are attached to the same target file
> using EPOLLEXCLUSIVE, one or more epfds will receive an event with
> epoll_wait(2). The default in this scenario (when EPOLLEXCLUSIVE is not
> set) is for all epfds to receive an event.
>
> The events supported by EPOLLEXCLUSIVE are: EPOLLIN, EPOLLOUT, EPOLLERR,
> EPOLLHUP, EPOLLWAKEUP, and EPOLLET. epoll_wait(2) will always wait for
> EPOLLERR and EPOLLHUP; it is not necessary to set it in events. If
> EPOLLEXCLUSIVE is set using epoll_ctl(2), then a subsequent
> EPOLL_CTL_MOD on the same epfd, fd pair will retrun -EINVAL. An
> epoll_ctl(2) that specifies EPOLLEXCLUSIVE in events and specifies the
> target file descriptor fd as an epoll instance will return -EINVAL
> as well.

So, I worked that up into the following text:

EPOLLEXCLUSIVE (since Linux 4.5)
Sets an exclusive wakeup mode for the epoll file
descriptor that is being attached to the target file
descriptor, fd. When a wakeup event occurs and multiple
epoll file descriptors are attached to the same target
file using EPOLLEXCLUSIVE, one or more of the epoll file
descriptors will receive an event with epoll_wait(2).
The default in this scenario (when EPOLLEXCLUSIVE is not
set) is for all epoll file descriptors to receive an
event. EPOLLEXCLUSIVE is thus useful for avoiding thunâ
dering herd problems in certain scenarios.

If the same file descriptor is in multiple epoll
instances, some with the EPOLLEXCLUSIVE flag, and others
without, then events will provided to all epoll
instances that did not specify EPOLLEXCLUSIVE, and at
least one of the epoll instances that did specify
EPOLLEXCLUSIVE.

The following values may be specified in conjunction
with EPOLLEXCLUSIVE: EPOLLIN, EPOLLOUT, EPOLLWAKEUP, and
EPOLLET. EPOLLHUP and EPOLLERR can also be specified,
but are ignored (as usual). Attempts to specify other
values in events yield an error. EPOLLEXCLUSIVE may be
used only in an EPOLL_CTL_ADD operation; attempts to
employ it with EPOLL_CTL_MOD yield an error. If
EPOLLEXCLUSIVE has set using epoll_ctl(2), then a subseâ
quent EPOLL_CTL_MOD on the same epfd, fd pair yields an
error. An epoll_ctl(2) that specifies EPOLLEXCLUSIVE in
events and specifies the target file descriptor fd as an
epoll instance will likewise fail. The error in all of
these cases is EINVAL.

ERRORS
EINVAL An invalid event type was specified along with EPOLLEXâ
CLUSIVE in events.

EINVAL op was EPOLL_CTL_MOD and events included EPOLLEXCLUSIVE.

EINVAL op was EPOLL_CTL_MOD and the EPOLLEXCLUSIVE flag has
previously been applied to this epfd, fd pair.

EINVAL EPOLLEXCLUSIVE was specified in event and fd is refers
to an epoll instance.

Is there anything that needs to be fixed in the above text?

Cheers,

Michael


--
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/