On Tue Aug 17 2010 at 15:41:11 +0200, Juergen Hannken-Illjes wrote: > > > vp->v_freelisthd = NULL; > > > mutex_exit(&vnode_free_list_lock); > > > > > > - if (vp->v_usecount != 0) { > > > - /* > > > - * was referenced again before we got the interlock > > > - * Don't return to freelist - the holder of the last > > > - * reference will destroy it. > > > - */ > > > - mutex_exit(&vp->v_interlock); > > > - mutex_enter(&vnode_free_list_lock); > > > - goto retry; > > > - } > > > + KASSERT(vp->v_usecount == 0); > > > > It's not obvious from your commit message what prevents it from gaining > > a reference after the lock is dropped. > > The interlock is taken before the freelist lock is dropped and vnodes on > the free lists should never appear on other lists.
Not even the name cache? (I can't remember off the top of my head, but IIRC there's something sneaky about it)