CVSROOT:        /cvs
Module name:    src
Changes by:     m...@cvs.openbsd.org    2025/01/24 02:19:07

Modified files:
        sys/net        : if.c if_var.h 

Log message:
Move interface groups copyout(9)s out of netlock within ifioctl_get().

The interface groups use complicated linking scheme with special data
structures allowing to link multiple interfaces with multiple groups.
We can't use iterators here, because some path are netlock covered and
we can't sleep in refcnt_finalize(9). We also can't use double locking
to protect this linking data because this new lock will cover very wide
area in kernel.

Link desired interface groups or interfaces from group into temporary
lists, protected by new dedicated `if_tmplist_lock' rwlock(9). Bump the
reference counter to make concurrent destruction thread wait until
temporary linked data became unused.

Delivered data are immutable, so netlock required only while filling
temporary lists.

ok bluhm

Reply via email to