aboutsummaryrefslogtreecommitdiff
path: root/sys/vm/vnode_pager.c
diff options
context:
space:
mode:
authorJohn Dyson <dyson@FreeBSD.org>1997-02-10 02:22:35 +0000
committerJohn Dyson <dyson@FreeBSD.org>1997-02-10 02:22:35 +0000
commit996c772f581f5624846dcd8470ca6860c1678b7c (patch)
tree88a944de263165091f0a18abeedbaaccec532407 /sys/vm/vnode_pager.c
parentd243e2f7f456304830e7f832629bc24c504c2385 (diff)
Notes
Diffstat (limited to 'sys/vm/vnode_pager.c')
-rw-r--r--sys/vm/vnode_pager.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c
index bf6a1c9dcd9d..12e2f8c3b444 100644
--- a/sys/vm/vnode_pager.c
+++ b/sys/vm/vnode_pager.c
@@ -329,6 +329,7 @@ void
vnode_pager_umount(mp)
register struct mount *mp;
{
+ struct proc *p = curproc; /* XXX */
struct vnode *vp, *nvp;
loop:
@@ -347,9 +348,9 @@ loop:
nvp = vp->v_mntvnodes.le_next;
if (vp->v_object != NULL) {
- VOP_LOCK(vp);
- vnode_pager_uncache(vp);
- VOP_UNLOCK(vp);
+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
+ vnode_pager_uncache(vp, p);
+ VOP_UNLOCK(vp, 0, p);
}
}
}
@@ -364,8 +365,9 @@ loop:
* re-locking the vnode.
*/
void
-vnode_pager_uncache(vp)
+vnode_pager_uncache(vp, p)
struct vnode *vp;
+ struct proc *p;
{
vm_object_t object;
@@ -383,10 +385,10 @@ vnode_pager_uncache(vp)
* VBLK devices...
*/
if (vp->v_type != VBLK)
- VOP_UNLOCK(vp);
+ VOP_UNLOCK(vp, 0, p);
pager_cache(object, FALSE);
if (vp->v_type != VBLK)
- VOP_LOCK(vp);
+ vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
return;
}
@@ -968,11 +970,13 @@ struct vnode *
vnode_pager_lock(object)
vm_object_t object;
{
+ struct proc *p = curproc; /* XXX */
+
for (; object != NULL; object = object->backing_object) {
if (object->type != OBJT_VNODE)
continue;
- VOP_LOCK(object->handle);
+ vn_lock(object->handle, LK_EXCLUSIVE | LK_RETRY, p);
return object->handle;
}
return NULL;