Currently: - For VOP_INACTIVE, vnode lock is held on entry and released on exit. - For VOP_RECLAIM, vnode lock is not held on entry.
I would like to change this so that: - For VOP_INACTIVE, vnode lock is held on entry and exit. - For VOP_RECLAIM, vnode lock is held on entry. VOP_RECLAIM then *destroys* the lock, so we don't have to say whether it is held or released on exit. This requires a one-line change to vfs_vnode.c, and then mechanically moving VOP_UNLOCK from *_inactive to *_reclaim throughout the file systems. I did a quick survey of every VOP_INACTIVE in src/sys. With one exception, every one either (a) does VOP_UNLOCK just before return, or (b) defers to another VOP_INACTIVE method. The one exception is nfs_inactive, which also queues something up on a workqueue, but I can't imagine that it matters whether the vnode lock is held. Benefit: Functions that VOP_RECLAIM calls would be able to assert, rather than vaguely assume, exclusive ownership of the vnode lock. Currently various code paths, e.g. ffs_update, require exclusive access to the vnode in question, which can't be asserted right now because of the VOP_RECLAIM exception. Thoughts? Objections?