-#ifdef NULLFS_DIAGNOSTIC
- printf("null_node_alloc(%x, %x)\n", vp, targetvp);
-#endif
-
- MALLOC(a, struct null_node *, sizeof(struct null_node), M_TEMP, M_WAITOK);
- a->null_vnode = vp;
- vp->v_data = a;
- VREF(targetvp);
- a->null_lowervp = targetvp;
- hd = null_node_hash(targetvp);
- insque(a, hd);
-
-#ifdef NULLFS_DIAGNOSTIC
- vprint("alloc vp", vp);
- vprint("alloc targetvp", targetvp);
-#endif
-}
-
-#ifdef NULLFS_DIAGNOSTIC
-void
-null_node_flushmp (mp)
- struct mount *mp;
-{
- struct null_node_cache *ac;
- int i = 0;
- struct null_node *roota;
-
- printf("null_node_flushmp (%x)\n", mp);
-
- roota = VTONULLNODE(MOUNTTONULLMOUNT(mp)->nullm_rootvp);
-
- for (ac = null_node_cache; ac < null_node_cache + NNULLNODECACHE; ac++) {
- struct null_node *a = ac->ac_forw;
- while (a != (struct null_node *) ac) {
- if (a != roota && a->null_vnode->v_mount == mp) {
- struct vnode *vp = a->null_lowervp;
- if (vp) {
- a->null_lowervp = 0;
- vprint("would vrele", vp);
- /*vrele(vp);*/
- i++;
- }
- }
- a = a->null_forw;
- }
+ if (vp->v_flag & VXLOCK) {
+ vp->v_flag |= VXWANT;
+ sleep((caddr_t)vp, PINOD);
+ return (1);
+ }
+ if (vp->v_usecount == 0) {
+ if (vq = vp->v_freef)
+ vq->v_freeb = vp->v_freeb;
+ else
+ vfreet = vp->v_freeb;
+ *vp->v_freeb = vq;
+ vp->v_freef = NULL;
+ vp->v_freeb = NULL;