Page MenuHomeFreeBSD

D17323.id48487.diff
No OneTemporary

D17323.id48487.diff

Index: sys/vm/vm_fault.c
===================================================================
--- sys/vm/vm_fault.c
+++ sys/vm/vm_fault.c
@@ -1633,16 +1633,16 @@
dst_object->flags |= OBJ_COLORED;
dst_object->pg_color = atop(dst_entry->start);
#endif
+ dst_object->domain = src_object->domain;
+ dst_object->charge = dst_entry->end - dst_entry->start;
}
VM_OBJECT_WLOCK(dst_object);
KASSERT(upgrade || dst_entry->object.vm_object == NULL,
("vm_fault_copy_entry: vm_object not NULL"));
if (src_object != dst_object) {
- dst_object->domain = src_object->domain;
dst_entry->object.vm_object = dst_object;
dst_entry->offset = 0;
- dst_object->charge = dst_entry->end - dst_entry->start;
}
if (fork_charge != NULL) {
KASSERT(dst_entry->cred == NULL,
@@ -1650,9 +1650,11 @@
dst_object->cred = curthread->td_ucred;
crhold(dst_object->cred);
*fork_charge += dst_object->charge;
- } else if (dst_object->cred == NULL) {
- KASSERT(dst_entry->cred != NULL, ("no cred for entry %p",
- dst_entry));
+ } else if ((dst_object->type == OBJT_DEFAULT ||
+ dst_object->type == OBJT_SWAP) &&
+ dst_object->cred == NULL) {
+ KASSERT(dst_entry->cred != NULL,
+ ("no cred for entry %p", dst_entry));
dst_object->cred = dst_entry->cred;
dst_entry->cred = NULL;
}
@@ -1738,8 +1740,9 @@
if (vm_page_sleep_if_busy(dst_m, "fltupg"))
goto again;
vm_page_xbusy(dst_m);
- KASSERT(dst_m->valid == VM_PAGE_BITS_ALL,
- ("invalid dst page %p", dst_m));
+ if (dst_m->pindex < dst_object->size)
+ KASSERT(dst_m->valid == VM_PAGE_BITS_ALL,
+ ("invalid dst page %p", dst_m));
}
VM_OBJECT_WUNLOCK(dst_object);
@@ -1748,8 +1751,9 @@
* mapping is being replaced by a write-enabled
* mapping, then wire that new mapping.
*/
- pmap_enter(dst_map->pmap, vaddr, dst_m, prot,
- access | (upgrade ? PMAP_ENTER_WIRED : 0), 0);
+ if (dst_m->valid == VM_PAGE_BITS_ALL)
+ pmap_enter(dst_map->pmap, vaddr, dst_m, prot,
+ access | (upgrade ? PMAP_ENTER_WIRED : 0), 0);
/*
* Mark it no longer busy, and put it on the active list.

File Metadata

Mime Type
text/plain
Expires
Wed, Apr 22, 9:31 AM (21 m, 16 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31968587
Default Alt Text
D17323.id48487.diff (2 KB)

Event Timeline