diff options
author | dg <dg@FreeBSD.org> | 1995-02-22 09:15:35 +0000 |
---|---|---|
committer | dg <dg@FreeBSD.org> | 1995-02-22 09:15:35 +0000 |
commit | b523cbbaad942c718c8ec6a20ce97c89ac6923ec (patch) | |
tree | 781a76b11cd93d49f66f76d32007c1f90de749e7 /sys/vm/vnode_pager.c | |
parent | a40bad2c2dece3e17c30cc2004d9caa97b8dab74 (diff) | |
download | FreeBSD-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.c | 8 |
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???"); } |