Page MenuHomeFreeBSD

D50601.id156272.diff
No OneTemporary

D50601.id156272.diff

Index: sys/vm/vm_page.c
===================================================================
--- sys/vm/vm_page.c
+++ sys/vm/vm_page.c
@@ -4882,7 +4882,7 @@
{
vm_page_t m;
vm_page_t ma[VM_INITIAL_PAGEIN];
- int after, i, pflags, rv;
+ int after, ahead, i, pflags, rv;
KASSERT((allocflags & VM_ALLOC_SBUSY) == 0 ||
(allocflags & VM_ALLOC_IGN_SBUSY) != 0,
@@ -4941,16 +4941,24 @@
after = MAX(after, 1);
ma[0] = m;
pctrie_iter_reset(pages);
+ ahead = -1;
for (i = 1; i < after; i++) {
- m = vm_radix_iter_lookup(pages, pindex + i);
- if (m == NULL) {
+ if (ahead < 0) {
+ ahead = vm_radix_iter_lookup_range(pages,
+ pindex + i, &ma[i], after - i);
+ }
+ if (ahead-- > 0) {
+ m = ma[i];
+ if (vm_page_any_valid(m) ||
+ !vm_page_tryxbusy(m))
+ break;
+ } else {
m = vm_page_alloc_iter(object, pindex + i,
VM_ALLOC_NORMAL, pages);
if (m == NULL)
break;
- } else if (vm_page_any_valid(m) || !vm_page_tryxbusy(m))
- break;
- ma[i] = m;
+ ma[i] = m;
+ }
}
after = i;
vm_object_pip_add(object, after);

File Metadata

Mime Type
text/plain
Expires
Mon, Feb 9, 12:02 PM (16 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28576015
Default Alt Text
D50601.id156272.diff (1 KB)

Event Timeline