Index: sys/compat/linuxkpi/common/src/linux_page.c =================================================================== --- sys/compat/linuxkpi/common/src/linux_page.c +++ sys/compat/linuxkpi/common/src/linux_page.c @@ -296,14 +296,21 @@ page = PHYS_TO_VM_PAGE(IDX_TO_OFF(pfn)); if (!vm_page_busy_acquire(page, VM_ALLOC_WAITFAIL)) goto retry; - if (vm_page_insert(page, vm_obj, pindex)) { - vm_page_xunbusy(page); - return (VM_FAULT_OOM); - } + if (page->object != NULL) { + VM_OBJECT_ASSERT_WLOCKED(page->object); + if (vm_page_rename(page, vm_obj, pindex)) + goto oom; + } else + if (vm_page_insert(page, vm_obj, pindex)) + goto oom; vm_page_valid(page); } pmap_page_set_memattr(page, pgprot2cachemode(prot)); vma->vm_pfn_count++; return (VM_FAULT_NOPAGE); + +oom: + vm_page_xunbusy(page); + return (VM_FAULT_OOM); }