summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-06-22 05:36:53 +0000
committeralc <alc@FreeBSD.org>2003-06-22 05:36:53 +0000
commit5d0aaa2a8797f36a0400abe3aac546b308192bcf (patch)
tree807e41fbc20b0da811e0f1accb611a148737fcbb /sys/vm
parent9e1cffe0692d16b27f8ce86102ece15af0bf7a9d (diff)
downloadFreeBSD-src-5d0aaa2a8797f36a0400abe3aac546b308192bcf.zip
FreeBSD-src-5d0aaa2a8797f36a0400abe3aac546b308192bcf.tar.gz
As vm_fault() descends the chain of backing objects, set paging-in-
progress on the next object before clearing it on the current object.
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_fault.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index cefcfb9..d3ccd93 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -642,16 +642,16 @@ readrest:
fs.m->valid = VM_PAGE_BITS_ALL;
break; /* break to PAGE HAS BEEN FOUND */
} else {
- if (fs.object != fs.first_object) {
- VM_OBJECT_LOCK(fs.object);
- vm_object_pip_wakeup(fs.object);
- VM_OBJECT_UNLOCK(fs.object);
- }
- KASSERT(fs.object != next_object, ("object loop %p", next_object));
- fs.object = next_object;
+ KASSERT(fs.object != next_object,
+ ("object loop %p", next_object));
+ VM_OBJECT_LOCK(next_object);
+ vm_object_pip_add(next_object, 1);
+ VM_OBJECT_UNLOCK(next_object);
VM_OBJECT_LOCK(fs.object);
- vm_object_pip_add(fs.object, 1);
+ if (fs.object != fs.first_object)
+ vm_object_pip_wakeup(fs.object);
VM_OBJECT_UNLOCK(fs.object);
+ fs.object = next_object;
}
}
OpenPOWER on IntegriCloud