diff options
| author | Jeff Roberson <jeff@FreeBSD.org> | 2005-01-24 10:48:29 +0000 |
|---|---|---|
| committer | Jeff Roberson <jeff@FreeBSD.org> | 2005-01-24 10:48:29 +0000 |
| commit | ae51ff112794e6944bf1b9f9bbe28533b4ab4fa6 (patch) | |
| tree | d54b614de87a030b3a296e2fe36f65353ec6b291 /sys/vm/vnode_pager.c | |
| parent | e9f3e3f8ca4c0cecec2adf5fc27b78584fba7d20 (diff) | |
Notes
Diffstat (limited to 'sys/vm/vnode_pager.c')
| -rw-r--r-- | sys/vm/vnode_pager.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c index 4dae2231ba97..069a43c1687c 100644 --- a/sys/vm/vnode_pager.c +++ b/sys/vm/vnode_pager.c @@ -215,6 +215,7 @@ vnode_pager_haspage(object, pindex, before, after) int poff; int bsize; int pagesperblock, blocksperpage; + int vfslocked; VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); /* @@ -248,9 +249,9 @@ vnode_pager_haspage(object, pindex, before, after) reqblock = pindex * blocksperpage; } VM_OBJECT_UNLOCK(object); - mtx_lock(&Giant); + vfslocked = VFS_LOCK_GIANT(vp->v_mount); err = VOP_BMAP(vp, reqblock, NULL, &bn, after, before); - mtx_unlock(&Giant); + VFS_UNLOCK_GIANT(vfslocked); VM_OBJECT_LOCK(object); if (err) return TRUE; @@ -397,7 +398,6 @@ vnode_pager_addr(vp, address, run) daddr_t vblock; int voffset; - GIANT_REQUIRED; if (address < 0) return -1; @@ -441,8 +441,6 @@ vnode_pager_input_smlfs(object, m) vm_offset_t bsize; int error = 0; - GIANT_REQUIRED; - vp = object->handle; if (vp->v_mount == NULL) return VM_PAGER_BAD; @@ -619,14 +617,15 @@ vnode_pager_getpages(object, m, count, reqpage) int rtval; struct vnode *vp; int bytes = count * PAGE_SIZE; + int vfslocked; vp = object->handle; VM_OBJECT_UNLOCK(object); - mtx_lock(&Giant); + vfslocked = VFS_LOCK_GIANT(vp->v_mount); rtval = VOP_GETPAGES(vp, m, bytes, reqpage, 0); KASSERT(rtval != EOPNOTSUPP, ("vnode_pager: FS getpages not implemented\n")); - mtx_unlock(&Giant); + VFS_UNLOCK_GIANT(vfslocked); VM_OBJECT_LOCK(object); return rtval; } @@ -653,7 +652,6 @@ vnode_pager_generic_getpages(vp, m, bytecount, reqpage) int count; int error = 0; - GIANT_REQUIRED; object = vp->v_object; count = bytecount / PAGE_SIZE; @@ -946,7 +944,6 @@ vnode_pager_putpages(object, m, count, sync, rtvals) struct mount *mp; int bytes = count * PAGE_SIZE; - GIANT_REQUIRED; /* * Force synchronous operation if we are extremely low on memory * to prevent a low-memory deadlock. VOP operations often need to @@ -1006,7 +1003,6 @@ vnode_pager_generic_putpages(vp, m, bytecount, flags, rtvals) int error; int ioflags; - GIANT_REQUIRED; object = vp->v_object; count = bytecount / PAGE_SIZE; |
