What is the new struct kevent::ext member about? I read the new man page but I'm still unclear on it.
1. Who owns it? Does it depend on the filter, the identifier, or both? 2. Who writes or reads it, inside the kernel? It doesn't seem to be mentioned in kern_event.c. 3. Why is ext[0]/ext[1] treated differently from ext[2]/ext[3]? 4. If ext[2]/ext[3] are passed through verbatim, how are they different from just a larger udata member? Why can't the user application just use a pointer to a larger buffer here? 5. What happens if I fill nonzero ext[0]/ext[1] in a userland call to kevent? What filters respect it and how do I find out, short of reading the code? 6. What do I get if I read out of it in a userland call to kevent? What filters fill it and how do I find out, short of reading the code? 7. What's an example of a use from userland? Why did we need to change the kevent syscall? 8. Is this API shared with any other BSDs, or is anyone proposing to share it, or is it now a unique NetBSD extension?