summaryrefslogtreecommitdiffstats
path: root/sys/fs/nullfs
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2005-03-15 11:28:45 +0000
committerjeff <jeff@FreeBSD.org>2005-03-15 11:28:45 +0000
commitb59222bfe5f1814bc54510d8259545b2d8ab9443 (patch)
tree5ae2e671b4f7dc0fe108028ba34d6be1c5b2fb63 /sys/fs/nullfs
parent3337fd988cd3a53fc586bce9a6e063f598783e69 (diff)
downloadFreeBSD-src-b59222bfe5f1814bc54510d8259545b2d8ab9443.zip
FreeBSD-src-b59222bfe5f1814bc54510d8259545b2d8ab9443.tar.gz
- We have to transfer lockers after reseting our vnlock pointer.
Sponsored by: Isilon Systems, Inc.
Diffstat (limited to 'sys/fs/nullfs')
-rw-r--r--sys/fs/nullfs/null_vnops.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/fs/nullfs/null_vnops.c b/sys/fs/nullfs/null_vnops.c
index bee46ee..19e88b5 100644
--- a/sys/fs/nullfs/null_vnops.c
+++ b/sys/fs/nullfs/null_vnops.c
@@ -711,6 +711,7 @@ null_reclaim(struct vop_reclaim_args *ap)
struct vnode *vp = ap->a_vp;
struct null_node *xp = VTONULL(vp);
struct vnode *lowervp = xp->null_lowervp;
+ struct lock *vnlock;
if (lowervp) {
null_hashrem(xp);
@@ -721,7 +722,11 @@ null_reclaim(struct vop_reclaim_args *ap)
vp->v_data = NULL;
vp->v_object = NULL;
+ vnlock = vp->v_vnlock;
+ lockmgr(&vp->v_lock, LK_EXCLUSIVE, NULL, curthread);
vp->v_vnlock = &vp->v_lock;
+ transferlockers(vnlock, vp->v_vnlock);
+ lockmgr(vnlock, LK_RELEASE, NULL, curthread);
FREE(xp, M_NULLFSNODE);
return (0);
OpenPOWER on IntegriCloud