On Mon, Jan 10, 2011 at 07:38:22PM +0100, Juergen Hannken-Illjes wrote: > This is not a random change. Layered file systems take exactly one > reference on the lower vnode. All references regarding layered > vnodes are only taken on the layer vnode. So we get a bootom vnode > that is active (we are working on it) while it may have just one > reference. The upper (layer) vnode has the "valid" reference > count. > > Now when VOP_REVOKE() goes down the stack it will revoke the lowest > vnode but this vnode "looks" inactive. Adjusting the lower vnode > refcount gets the (in respect to activity) right usecount on the > lowest vnode while VOP_REVOKE() works on the lowest vnode.
As far as I can tell it only uses the usecount to decide whether the vnode is still active or not, so adding 1 temporarily should be sufficient if the goal is to have it not disappear. OTOH, it seems to me that it *should* disappear in that case, and also that vrevoke() should also end up getting called on the layer vnode. -- David A. Holland dholl...@netbsd.org