On Thu Jan 14 2010 at 22:41:53 +0000, Manuel Bouyer wrote: > Module Name: src > Committed By: bouyer > Date: Thu Jan 14 22:41:53 UTC 2010 > > Modified Files: > src/sys/kern: vfs_subr.c > > Log Message: > Remove KASSERT(vp->v_usecount == 1) in getnewvnode() and ungetnewvnode(). > Another process could be vget()ing the vnode and bump v_usecount while > getcleanvnode() is vclean()ing it (as vclean drops the interlock). > vget() will then wait for VI_XLOCK or VI_FREEING to clear; and we could test > this assertion while the other process is still slepping. We could even > end up in ungetnewvnode() before this other process got a chance to run.
Why doesn't the v_usecount == 1 check in getcleanvnode() work?