There are 2 changes in terms of behavior:
- mp == NULL is no longer supported. The only place in the tree which calls getnewvnode with mp == NULL does it for vp_crossmp which will never execute this codepath. Any vnode which legally has ->v_mount == NULL is also doomed, which once more wont execute for this code.
- VI_ACTIVE is required. It's an invariant that a non-doomed vnode being vdropped has it.
Pure refactoring:
- move freeing of the vnode away to a routine doing the reverse of getnewvnode. Perhaps both should use uma ctor/dtor instead.
- docouple vdrop and vdropl
- move returning the vnode to the free list to a separate routine
Note this removes an assertion for v_holdcnt from production kernels. If it seems desirable I can put it back to both routines.