Semantics are preserved. One benefit is that there are fewer accesses to both numvnodes and freevnodes.
I do not object to this patch but I would be more comfortable with kib reviewing.
Small change is that cyclecount was zeroed before when numvnodes < desiredvnodes.
Style recommends putting binary op on the previous line.
You can unlock vnode_list_mtx before wakeup.