diff options
| author | Tor Egge <tegge@FreeBSD.org> | 2006-03-02 22:13:28 +0000 |
|---|---|---|
| committer | Tor Egge <tegge@FreeBSD.org> | 2006-03-02 22:13:28 +0000 |
| commit | 3b582b4e72350d7a6342af85ca1356dcd1f2b2bc (patch) | |
| tree | a136dfc347b9ef7b044439ec33fe997d02fb4061 /sys/vm | |
| parent | 6b085058e4179f8bfd9ce1534f13cfa8ea2236a6 (diff) | |
Notes
Diffstat (limited to 'sys/vm')
| -rw-r--r-- | sys/vm/vm_contig.c | 3 | ||||
| -rw-r--r-- | sys/vm/vm_object.c | 3 | ||||
| -rw-r--r-- | sys/vm/vnode_pager.c | 2 |
3 files changed, 6 insertions, 2 deletions
diff --git a/sys/vm/vm_contig.c b/sys/vm/vm_contig.c index 488a16c76597..c8768850dc92 100644 --- a/sys/vm/vm_contig.c +++ b/sys/vm/vm_contig.c @@ -91,6 +91,7 @@ vm_contig_launder_page(vm_page_t m) vm_object_t object; vm_page_t m_tmp; struct vnode *vp; + struct mount *mp; object = m->object; if (!VM_OBJECT_TRYLOCK(object)) @@ -109,12 +110,14 @@ vm_contig_launder_page(vm_page_t m) vp = object->handle; vm_object_reference_locked(object); VM_OBJECT_UNLOCK(object); + (void) vn_start_write(vp, &mp, V_WAIT); vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, curthread); VM_OBJECT_LOCK(object); vm_object_page_clean(object, 0, 0, OBJPC_SYNC); VM_OBJECT_UNLOCK(object); VOP_UNLOCK(vp, 0, curthread); vm_object_deallocate(object); + vn_finished_write(mp); vm_page_lock_queues(); return (0); } else if (object->type == OBJT_SWAP || diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 5321b537b5bb..845752988ca4 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -993,6 +993,7 @@ vm_object_sync(vm_object_t object, vm_ooffset_t offset, vm_size_t size, { vm_object_t backing_object; struct vnode *vp; + struct mount *mp; int flags; if (object == NULL) @@ -1023,6 +1024,7 @@ vm_object_sync(vm_object_t object, vm_ooffset_t offset, vm_size_t size, int vfslocked; vp = object->handle; VM_OBJECT_UNLOCK(object); + (void) vn_start_write(vp, &mp, V_WAIT); vfslocked = VFS_LOCK_GIANT(vp->v_mount); vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, curthread); flags = (syncio || invalidate) ? OBJPC_SYNC : 0; @@ -1035,6 +1037,7 @@ vm_object_sync(vm_object_t object, vm_ooffset_t offset, vm_size_t size, VM_OBJECT_UNLOCK(object); VOP_UNLOCK(vp, 0, curthread); VFS_UNLOCK_GIANT(vfslocked); + vn_finished_write(mp); VM_OBJECT_LOCK(object); } if ((object->type == OBJT_VNODE || diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c index aafdea168e41..8532bbf2fe76 100644 --- a/sys/vm/vnode_pager.c +++ b/sys/vm/vnode_pager.c @@ -1017,11 +1017,9 @@ vnode_pager_putpages(object, m, count, sync, rtvals) VM_OBJECT_UNLOCK(object); if (vp->v_type != VREG) mp = NULL; - (void)vn_start_write(vp, &mp, V_WAIT); rtval = VOP_PUTPAGES(vp, m, bytes, sync, rtvals, 0); KASSERT(rtval != EOPNOTSUPP, ("vnode_pager: stale FS putpages\n")); - vn_finished_write(mp); VM_OBJECT_LOCK(object); } |
