From 1d2d7c6d645a327a2088eb0716a6df6e0ed7c8e0 Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Mon, 11 Apr 1994 23:06:28 -0800 Subject: [PATCH] don't vgone the vnode in vcount if it is ours SCCS-vsn: sys/kern/vfs_subr.c 8.12 --- usr/src/sys/kern/vfs_subr.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/usr/src/sys/kern/vfs_subr.c b/usr/src/sys/kern/vfs_subr.c index 17a0662e0c..176db6b0d0 100644 --- a/usr/src/sys/kern/vfs_subr.c +++ b/usr/src/sys/kern/vfs_subr.c @@ -9,7 +9,7 @@ * * %sccs.include.redist.c% * - * @(#)vfs_subr.c 8.11 (Berkeley) %G% + * @(#)vfs_subr.c 8.12 (Berkeley) %G% */ /* @@ -1005,19 +1005,20 @@ vfinddev(dev, type, vpp) vcount(vp) register struct vnode *vp; { - register struct vnode *vq; + register struct vnode *vq, *vnext; int count; +loop: if ((vp->v_flag & VALIASED) == 0) return (vp->v_usecount); -loop: - for (count = 0, vq = *vp->v_hashchain; vq; vq = vq->v_specnext) { + for (count = 0, vq = *vp->v_hashchain; vq; vq = vnext) { + vnext = vq->v_specnext; if (vq->v_rdev != vp->v_rdev || vq->v_type != vp->v_type) continue; /* * Alias, but not in use, so flush it out. */ - if (vq->v_usecount == 0) { + if (vq->v_usecount == 0 && vq != vp) { vgone(vq); goto loop; } -- 2.20.1