diff options
author | pjd <pjd@FreeBSD.org> | 2007-04-20 19:49:20 +0000 |
---|---|---|
committer | pjd <pjd@FreeBSD.org> | 2007-04-20 19:49:20 +0000 |
commit | acc4c54fc554d034a6cffaf5db33b3b358447060 (patch) | |
tree | f7167974b4d7d23e72ad2eef699f6331f2b58140 | |
parent | b388ff90ba28e24c1b28b7362d82d6480d60d996 (diff) | |
download | FreeBSD-src-acc4c54fc554d034a6cffaf5db33b3b358447060.zip FreeBSD-src-acc4c54fc554d034a6cffaf5db33b3b358447060.tar.gz |
Don't reinvent vm_page_grab().
Reviewed by: ups
-rw-r--r-- | sys/kern/uipc_syscalls.c | 26 |
1 files changed, 3 insertions, 23 deletions
diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c index d9e9f10..53de5bc 100644 --- a/sys/kern/uipc_syscalls.c +++ b/sys/kern/uipc_syscalls.c @@ -2038,35 +2038,15 @@ retry_space: VM_OBJECT_UNLOCK(obj); break; } -retry_lookup: + /* * Attempt to look up the page. * Allocate if not found or * wait and loop if busy. */ pindex = OFF_TO_IDX(off); - pg = vm_page_lookup(obj, pindex); - if (pg == NULL) { - pg = vm_page_alloc(obj, pindex, - VM_ALLOC_NOBUSY | VM_ALLOC_NORMAL | - VM_ALLOC_WIRED); - if (pg == NULL) { - VM_OBJECT_UNLOCK(obj); - VM_WAIT; - VM_OBJECT_LOCK(obj); - goto retry_lookup; - } - } else if (vm_page_sleep_if_busy(pg, TRUE, "sfpbsy")) - goto retry_lookup; - else { - /* - * Wire the page so it does not get - * ripped out from under us. - */ - vm_page_lock_queues(); - vm_page_wire(pg); - vm_page_unlock_queues(); - } + pg = vm_page_grab(obj, pindex, VM_ALLOC_NOBUSY | + VM_ALLOC_NORMAL | VM_ALLOC_WIRED | VM_ALLOC_RETRY); /* * Check if page is valid for what we need, |