Re: git: 851dc7f859c2 - main - jail: add jail descriptors

From: James Gritton <jamie_at_freebsd.org>
Date: Fri, 05 Sep 2025 17:57:30 UTC
On 2025-09-04 22:14, Konstantin Belousov wrote:
> BTW, you added some support for kqueue for jail events, but not to the
> jail file descriptors.  This seems to be backward: if somebody wants to
> monitor events for jails, then it is more reliable and straightforward
> to do with the new jail fds rather than with ids.

It is at least incomplete, and not the state I want things to be at.
There's a sticking point with jaildesc kqueue, so while I work that
out I went with jid-baseds kqueue as a starter.

The trouble is child jails.  I took their handling from the existing
child process handling, where I register a new kevent under the new
jail's id.  But that's something I can't do with descriptors, since
they have a process-specific identifier, the descriptor number.  The
code that creates the new event, coming from the jail_set call that
created a new jail, has access to the global descriptor (the struct
file), but not to the process(es) that have it open, so I have no
way of registering one or more events with that descriptor number.

One workaround is to have both jid- and jaildesc-based kevents, but
both of them register a new jid-based kevent for a newly created child
jail.  The caller may then get a descriptor with jail_get, and add a
kevent for it and remove the old jid-based one.  This would work, but
feels really klunky.

The other idea I've had is to register a temporary event, and then add
code to kqueue_scan that converts that into a proper jaildesc event
with the expected file descriptor number.  That would require either
jaildesc-specific code in or around kqueue_scan, or adding another
filterops function, neither of which is great.  Still, it seems the
better solution.

With working jaildesc kevent support, the jid-based kevents would be
unnecessary, so if I can get this done before 15 is released, they can
go away.

- Jamie