On Thu, 12 Oct 2023 12:51:06 +1100
David Gibson <david(a)gibson.dropbear.id.au> wrote:
tcp_splice_epoll_ctl() removes both sockets from
the epoll set if called
when conn->flags & CLOSING. This will always happen immediately after
setting that flag, since conn_flag_do() makes the call itself. That's also
the _only_ time it can happen: we perform the EPOLL_CTL_DEL without
clearing the conn->in_epoll flag, meaning that any further calls to
tcp_splice_epoll_ctl() would attempt EPOLL_CTL_MOD, which would necessarily
fail since the fds are no longer in the epoll.
The EPOLL_CTL_DEL path in tcp_splice_epoll_ctl() has essentially zero
overlap with anything else the function does, so just move them to be
open coded in conn_flag_do().
Caveat: this does require kernel 2.6.9 or later, in order to pass NULL as
the event structure for epoll_ctl(). I _think_ we already require newer
kernels than that for other features.
Yes, we do, we need at least 3.13 for unprivileged user namespaces.
Thanks, message updated accordingly.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!