diff options
Diffstat (limited to 'sys/fs/nullfs/null_vnops.c')
-rw-r--r-- | sys/fs/nullfs/null_vnops.c | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/sys/fs/nullfs/null_vnops.c b/sys/fs/nullfs/null_vnops.c index 1229e59..f3201e2 100644 --- a/sys/fs/nullfs/null_vnops.c +++ b/sys/fs/nullfs/null_vnops.c @@ -739,26 +739,19 @@ null_reclaim(ap) struct thread *a_td; } */ *ap; { - struct thread *td = ap->a_td; struct vnode *vp = ap->a_vp; struct null_node *xp = VTONULL(vp); struct vnode *lowervp = xp->null_lowervp; - void *vdata; - lockmgr(&null_hashlock, LK_EXCLUSIVE, NULL, td); - LIST_REMOVE(xp, null_hash); - lockmgr(&null_hashlock, LK_RELEASE, NULL, td); + if (lowervp) { + null_hashrem(xp); - /* - * Now it is safe to drop references to the lower vnode. - * VOP_INACTIVE() will be called by vrele() if necessary. - */ - vrele(lowervp); - vrele(lowervp); + vrele(lowervp); + vrele(lowervp); + } - vdata = vp->v_data; vp->v_data = NULL; - FREE(vdata, M_NULLFSNODE); + FREE(xp, M_NULLFSNODE); return (0); } |