summaryrefslogtreecommitdiffstats
path: root/sys/vm/vnode_pager.c
diff options
context:
space:
mode:
authordg <dg@FreeBSD.org>1995-02-22 09:15:35 +0000
committerdg <dg@FreeBSD.org>1995-02-22 09:15:35 +0000
commitb523cbbaad942c718c8ec6a20ce97c89ac6923ec (patch)
tree781a76b11cd93d49f66f76d32007c1f90de749e7 /sys/vm/vnode_pager.c
parenta40bad2c2dece3e17c30cc2004d9caa97b8dab74 (diff)
downloadFreeBSD-src-b523cbbaad942c718c8ec6a20ce97c89ac6923ec.zip
FreeBSD-src-b523cbbaad942c718c8ec6a20ce97c89ac6923ec.tar.gz
Only do object paging_in_progress wakeups if someone is waiting on this
condition. Submitted by: John Dyson
Diffstat (limited to 'sys/vm/vnode_pager.c')
-rw-r--r--sys/vm/vnode_pager.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c
index 76831a9..be36ec9 100644
--- a/sys/vm/vnode_pager.c
+++ b/sys/vm/vnode_pager.c
@@ -37,7 +37,7 @@
* SUCH DAMAGE.
*
* from: @(#)vnode_pager.c 7.5 (Berkeley) 4/20/91
- * $Id: vnode_pager.c,v 1.22 1995/02/03 06:46:28 davidg Exp $
+ * $Id: vnode_pager.c,v 1.23 1995/02/21 01:22:48 davidg Exp $
*/
/*
@@ -225,6 +225,7 @@ vnode_pager_dealloc(pager)
object = (vm_object_t) vp->v_vmdata;
if (object) {
while (object->paging_in_progress) {
+ object->flags |= OBJ_PIPWNT;
tsleep(object, PVM, "vnpdea", 0);
}
}
@@ -565,8 +566,11 @@ vnode_pager_iodone(bp)
pmap_qremove(paddr, npages);
if (obj) {
--obj->paging_in_progress;
- if (obj->paging_in_progress == 0)
+ if (obj->paging_in_progress == 0 &&
+ (obj->flags & OBJ_PIPWNT)) {
+ obj->flags &= ~OBJ_PIPWNT;
wakeup((caddr_t) obj);
+ }
} else {
panic("vnode_pager_iodone: object is gone???");
}
OpenPOWER on IntegriCloud