The primary motivation for this change is to eliminate the active list (see remaining reviews).
vfs: add per-mount vnode dirty list and use it for deferred inactive + msync
This obviates the need to scan the entire active list looking for vnodes
of interest.
msync is handled by adding all vnodes with write count to the dirty list.
deferred inactive directly adds vnodes as it sets the VI_DEFINACT
flag.
Vnodes get dequeued from the list when their hold count reaches 0.
Newly added MNT_VNODE_FOREACH_DIRTY* macros support filtering so that
spurious locking is avoided in the common case.