Index: sys/vm/vm_fault.c =================================================================== --- sys/vm/vm_fault.c +++ sys/vm/vm_fault.c @@ -836,22 +836,20 @@ */ fs.object == fs.first_object->backing_object) { /* - * get rid of the unnecessary page + * grab the page and put it into the + * process'es object. */ - vm_page_lock(fs.first_m); - vm_page_remove(fs.first_m); - vm_page_unlock(fs.first_m); + vm_page_lock(fs.m); + vm_page_remove(fs.m); + vm_page_unlock(fs.m); + if (vm_page_replace(fs.m, fs.first_object, + fs.first_pindex) != fs.first_m) + panic("%s: invalid page replacement", + __func__); + vm_page_dirty(fs.m); /* - * grab the page and put it into the - * process'es object. The page is - * automatically made dirty. + * get rid of the unnecessary page */ - if (vm_page_rename(fs.m, fs.first_object, - fs.first_pindex)) { - VM_OBJECT_WUNLOCK(fs.first_object); - unlock_and_deallocate(&fs); - goto RetryFault; - } vm_page_lock(fs.first_m); vm_page_free(fs.first_m); vm_page_unlock(fs.first_m);