go back to using afs_vget instead of VREF for VN_HOLD
in afs_vget, only insert vnode in mount queue if it came off freelist
/* vnode */
#define SetAfsVnode(vn) /* nothing; done in getnewvnode() */
-#define IsAfsVnode(vn) ((vn)->v_op == afs_vnodeop_p)
-#define VN_HOLD(vp) VREF(vp)
+#define IsAfsVnode(vn) ((vn)->v_op == afs_vnodeop_p)
+#define VN_HOLD(vp) afs_vget((vp), 0)
#define VN_RELE(vp) vrele(vp)
#define osi_vnhold(avc, r) afs_vget(AFSTOV(avc), 0)
#define va_nodeid va_fileid
panic("afs_vget");
}
error = vget(vp, lfl, curproc);
- if (!error)
- insmntque(vp, afs_globalVFS); /* take off free list */
+ if (!error && vp->v_usecount == 1) {
+ /* vget() took it off the freelist; put it on our mount queue */
+ insmntque(vp, afs_globalVFS);
+ }
return error;
}