diff options
author | Sergey Bugaev <bugaevc@gmail.com> | 2021-05-06 15:56:26 +0300 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2021-05-06 23:54:32 +0200 |
commit | a9f1e487350cca14ac7df732ac24437822d4eac9 (patch) | |
tree | 24ff6a41fce282e503e70796293c0aac5323e534 /libpager | |
parent | c1e4791543544e91d52d3e85590a370494c03603 (diff) | |
download | hurd-a9f1e487350cca14ac7df732ac24437822d4eac9.tar.gz hurd-a9f1e487350cca14ac7df732ac24437822d4eac9.tar.bz2 hurd-a9f1e487350cca14ac7df732ac24437822d4eac9.zip |
libpager: Fix mixing up success and error
_pager_pagemap_resize () returns an error or 0 on success,
not a boolean.
Message-Id: <20210506125631.79117-2-bugaevc@gmail.com>
Diffstat (limited to 'libpager')
-rw-r--r-- | libpager/offer-page.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/libpager/offer-page.c b/libpager/offer-page.c index 9f090bcb..ddea236a 100644 --- a/libpager/offer-page.c +++ b/libpager/offer-page.c @@ -31,21 +31,22 @@ pager_offer_page (struct pager *p, pthread_mutex_lock (&p->interlock); if (_pager_pagemap_resize (p, offset + vm_page_size)) + goto release_out; + + short *pm_entry = &p->pagemap[offset / vm_page_size]; + + while (*pm_entry & PM_INCORE) { - short *pm_entry = &p->pagemap[offset / vm_page_size]; - - while (*pm_entry & PM_INCORE) - { - pthread_mutex_unlock (&p->interlock); - pager_flush_some (p, offset, vm_page_size, 1); - pthread_mutex_lock (&p->interlock); - } - *pm_entry |= PM_INCORE; - - memory_object_data_supply (p->memobjcntl, offset, buf, vm_page_size, 0, - writelock ? VM_PROT_WRITE : VM_PROT_NONE, - precious, MACH_PORT_NULL); + pthread_mutex_unlock (&p->interlock); + pager_flush_some (p, offset, vm_page_size, 1); + pthread_mutex_lock (&p->interlock); } + *pm_entry |= PM_INCORE; + + memory_object_data_supply (p->memobjcntl, offset, buf, vm_page_size, 0, + writelock ? VM_PROT_WRITE : VM_PROT_NONE, + precious, MACH_PORT_NULL); + release_out: pthread_mutex_unlock (&p->interlock); } |