Page MenuHomeFreeBSD

D14625.id40165.diff
No OneTemporary

D14625.id40165.diff

Index: sys/vm/vm_fault.c
===================================================================
--- sys/vm/vm_fault.c
+++ sys/vm/vm_fault.c
@@ -662,6 +662,12 @@
*/
fs.m = vm_page_lookup(fs.object, fs.pindex);
if (fs.m != NULL) {
+ /*
+ * Reference the page so that the page daemon doesn't
+ * reclaim it too quickly.
+ */
+ vm_page_aflag_set(fs.m, PGA_REFERENCED);
+
/*
* Wait/Retry if the page is busy. We have to do this
* if the page is either exclusive or shared busy
@@ -679,12 +685,6 @@
* to pmap it.
*/
if (vm_page_busied(fs.m)) {
- /*
- * Reference the page before unlocking and
- * sleeping so that the page daemon is less
- * likely to reclaim it.
- */
- vm_page_aflag_set(fs.m, PGA_REFERENCED);
if (fs.object != fs.first_object) {
if (!VM_OBJECT_TRYWLOCK(
fs.first_object)) {
@@ -710,9 +710,6 @@
vm_object_deallocate(fs.first_object);
goto RetryFault;
}
- vm_page_lock(fs.m);
- vm_page_remque(fs.m);
- vm_page_unlock(fs.m);
/*
* Mark page busy for other processes, and the
@@ -723,7 +720,7 @@
vm_page_xbusy(fs.m);
if (fs.m->valid != VM_PAGE_BITS_ALL)
goto readrest;
- break;
+ break; /* break to PAGE HAS BEEN FOUND */
}
KASSERT(fs.m == NULL, ("fs.m should be NULL, not %p", fs.m));
@@ -1105,6 +1102,7 @@
*/
fs.object == fs.first_object->backing_object) {
vm_page_lock(fs.m);
+ vm_page_remque(fs.m);
vm_page_remove(fs.m);
vm_page_unlock(fs.m);
vm_page_lock(fs.first_m);
Index: sys/vm/vm_page.c
===================================================================
--- sys/vm/vm_page.c
+++ sys/vm/vm_page.c
@@ -1504,7 +1504,9 @@
VM_OBJECT_ASSERT_WLOCKED(object);
KASSERT(mnew->object == NULL,
- ("vm_page_replace: page already in object"));
+ ("vm_page_replace: page %p already in object", mnew));
+ KASSERT(mnew->queue == PQ_NONE,
+ ("vm_page_replace: page %p is on a page queue", mnew));
/*
* This function mostly follows vm_page_insert() and

File Metadata

Mime Type
text/plain
Expires
Fri, Aug 21, 6:30 PM (2 h, 45 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37045562
Default Alt Text
D14625.id40165.diff (2 KB)

Event Timeline