summaryrefslogtreecommitdiffstats
path: root/sys/fs/nullfs/null_vnops.c
diff options
context:
space:
mode:
authorsemenu <semenu@FreeBSD.org>2002-06-13 18:25:06 +0000
committersemenu <semenu@FreeBSD.org>2002-06-13 18:25:06 +0000
commit7e3005a305921f4ef318191154628c2723c3c2bf (patch)
tree00f39a8efe57dd5371cd3f460bc978cc373ac8c6 /sys/fs/nullfs/null_vnops.c
parent7baa028f375f33f5042fc2e26feba46a7aa2115f (diff)
downloadFreeBSD-src-7e3005a305921f4ef318191154628c2723c3c2bf.zip
FreeBSD-src-7e3005a305921f4ef318191154628c2723c3c2bf.tar.gz
Fix the "error" path (when dropping not fully initialized vnode).
Also move hash operations out of null_vnops.c and explicitly initialize v_lock in null_node_alloc (to set wmesg). Reviewed by: bp MFC after: 2 weeks
Diffstat (limited to 'sys/fs/nullfs/null_vnops.c')
-rw-r--r--sys/fs/nullfs/null_vnops.c19
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);
}
OpenPOWER on IntegriCloud