diff options
-rw-r--r-- | libpager/offer-page.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libpager/offer-page.c b/libpager/offer-page.c index 6140966e..42706929 100644 --- a/libpager/offer-page.c +++ b/libpager/offer-page.c @@ -28,6 +28,12 @@ pager_offer_page (struct pager *p, vm_offset_t offset, vm_address_t buf) { + /* The caller expects this to get written back, but if the page is + currently resident then our request will get ignored, so flush it + first */ + if (precious) + pager_flush_some (p, offset, vm_page_size, 1); + memory_object_data_supply (p->memobjcntl, offset, buf, vm_page_size, 0, writelock ? VM_PROT_WRITE : VM_PROT_NONE, precious, MACH_PORT_NULL); |