panic when vref is used on zero ref count vnodes
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Thu, 29 Apr 1993 05:47:26 +0000 (21:47 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Thu, 29 Apr 1993 05:47:26 +0000 (21:47 -0800)
SCCS-vsn: sys/kern/vfs_subr.c 7.98

usr/src/sys/kern/vfs_subr.c

index ca07d58..47ff46f 100644 (file)
@@ -4,7 +4,7 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)vfs_subr.c  7.97 (Berkeley) %G%
+ *     @(#)vfs_subr.c  7.98 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
@@ -261,7 +261,7 @@ getnewvnode(tag, mp, vops, vpp)
        vp->v_tag = tag;
        vp->v_op = vops;
        insmntque(vp, mp);
        vp->v_tag = tag;
        vp->v_op = vops;
        insmntque(vp, mp);
-       VREF(vp);
+       vp->v_usecount++;
        *vpp = vp;
        return (0);
 }
        *vpp = vp;
        return (0);
 }
@@ -581,7 +581,7 @@ vget(vp)
                vp->v_freef = NULL;
                vp->v_freeb = NULL;
        }
                vp->v_freef = NULL;
                vp->v_freeb = NULL;
        }
-       VREF(vp);
+       vp->v_usecount++;
        VOP_LOCK(vp);
        return (0);
 }
        VOP_LOCK(vp);
        return (0);
 }
@@ -595,6 +595,8 @@ void vref(vp)
        struct vnode *vp;
 {
 
        struct vnode *vp;
 {
 
+       if (vp->v_usecount <= 0)
+               panic("vref used where vget required");
        vp->v_usecount++;
        if (vp->v_type != VBLK && curproc)
                curproc->p_spare[0]++;
        vp->v_usecount++;
        if (vp->v_type != VBLK && curproc)
                curproc->p_spare[0]++;