aboutsummaryrefslogtreecommitdiff
path: root/sys/vm/vnode_pager.c
diff options
context:
space:
mode:
authorJeff Roberson <jeff@FreeBSD.org>2019-08-19 22:25:28 +0000
committerJeff Roberson <jeff@FreeBSD.org>2019-08-19 22:25:28 +0000
commit4153054a7c12451edd54f2f3e763d1dbfad49d09 (patch)
tree51c8d0b1c9dcc065f71102d5647cdaba9d774b06 /sys/vm/vnode_pager.c
parent8a3238521b704c52bcc5fb9f9c67096c93a9e1f6 (diff)
Notes
Diffstat (limited to 'sys/vm/vnode_pager.c')
-rw-r--r--sys/vm/vnode_pager.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c
index e9a78f7b33ee6..70c919d9134e0 100644
--- a/sys/vm/vnode_pager.c
+++ b/sys/vm/vnode_pager.c
@@ -355,13 +355,14 @@ vnode_pager_haspage(vm_object_t object, vm_pindex_t pindex, int *before,
{
struct vnode *vp = object->handle;
daddr_t bn;
+ uintptr_t lockstate;
int err;
daddr_t reqblock;
int poff;
int bsize;
int pagesperblock, blocksperpage;
- VM_OBJECT_ASSERT_WLOCKED(object);
+ VM_OBJECT_ASSERT_LOCKED(object);
/*
* If no vp or vp is doomed or marked transparent to VM, we do not
* have the page.
@@ -384,9 +385,9 @@ vnode_pager_haspage(vm_object_t object, vm_pindex_t pindex, int *before,
blocksperpage = (PAGE_SIZE / bsize);
reqblock = pindex * blocksperpage;
}
- VM_OBJECT_WUNLOCK(object);
+ lockstate = VM_OBJECT_DROP(object);
err = VOP_BMAP(vp, reqblock, NULL, &bn, after, before);
- VM_OBJECT_WLOCK(object);
+ VM_OBJECT_PICKUP(object, lockstate);
if (err)
return TRUE;
if (bn == -1)