Index: sys/vm/vm_fault.c =================================================================== --- sys/vm/vm_fault.c +++ sys/vm/vm_fault.c @@ -719,9 +719,13 @@ * an error. */ if (rv == VM_PAGER_ERROR || rv == VM_PAGER_BAD) { - vm_page_lock(fs.m); - vm_page_free(fs.m); - vm_page_unlock(fs.m); + if (fs.m->wire_count == 0) { + vm_page_lock(fs.m); + vm_page_free(fs.m); + vm_page_unlock(fs.m); + } else { + vm_page_xunbusy(fs.m); + } fs.m = NULL; unlock_and_deallocate(&fs); return (rv == VM_PAGER_ERROR ? KERN_FAILURE : @@ -739,9 +743,13 @@ * that we are. */ if (fs.object != fs.first_object) { - vm_page_lock(fs.m); - vm_page_free(fs.m); - vm_page_unlock(fs.m); + if (fs.m->wire_count == 0) { + vm_page_lock(fs.m); + vm_page_free(fs.m); + vm_page_unlock(fs.m); + } else { + vm_page_xunbusy(fs.m); + } fs.m = NULL; } }