Page MenuHomeFreeBSD

D32090.id95704.diff
No OneTemporary

D32090.id95704.diff

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
@@ -281,6 +281,7 @@
unsigned long pfn, pgprot_t prot)
{
vm_object_t vm_obj = vma->vm_obj;
+ vm_object_t tmp_obj;
vm_page_t page;
vm_pindex_t pindex;
@@ -296,6 +297,20 @@
page = PHYS_TO_VM_PAGE(IDX_TO_OFF(pfn));
if (!vm_page_busy_acquire(page, VM_ALLOC_WAITFAIL))
goto retry;
+ if (page->object != NULL) {
+ tmp_obj = page->object;
+ vm_page_xunbusy(page);
+ VM_OBJECT_WUNLOCK(vm_obj);
+ VM_OBJECT_WLOCK(tmp_obj);
+ if (vm_page_busy_acquire(page, VM_ALLOC_WAITFAIL) &&
+ page->object == tmp_obj) {
+ vm_pager_page_unswapped(page);
+ vm_page_remove(page);
+ }
+ VM_OBJECT_WUNLOCK(tmp_obj);
+ VM_OBJECT_WLOCK(vm_obj);
+ goto retry;
+ }
if (vm_page_insert(page, vm_obj, pindex)) {
vm_page_xunbusy(page);
return (VM_FAULT_OOM);

File Metadata

Mime Type
text/plain
Expires
Mon, Aug 24, 3:09 AM (5 h, 25 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37171858
Default Alt Text
D32090.id95704.diff (1005 B)

Event Timeline