diff options
Diffstat (limited to 'sys/vm/vm_mmap.c')
-rw-r--r-- | sys/vm/vm_mmap.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c index 05bb8ae..4ae1f90 100644 --- a/sys/vm/vm_mmap.c +++ b/sys/vm/vm_mmap.c @@ -82,6 +82,7 @@ __FBSDID("$FreeBSD$"); #include <vm/vm_pageout.h> #include <vm/vm_extern.h> #include <vm/vm_page.h> +#include <vm/vm_radix.h> #include <vm/vnode_pager.h> #ifdef HWPMC_HOOKS @@ -912,10 +913,15 @@ RestartScan: object->type == OBJT_VNODE) { pindex = OFF_TO_IDX(current->offset + (addr - current->start)); - m = vm_page_lookup(object, pindex); - if (m == NULL && - vm_page_is_cached(object, pindex)) + m = vm_radix_lookup(&object->rtree, + pindex, VM_RADIX_ANY); + + /* Lock just for consistency. */ + mtx_lock(&vm_page_queue_free_mtx); + if (m != NULL && + (m->flags & PG_CACHED) != 0) mincoreinfo = MINCORE_INCORE; + mtx_unlock(&vm_page_queue_free_mtx); if (m != NULL && m->valid == 0) m = NULL; if (m != NULL) |