diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -5232,6 +5232,11 @@ } break; } + if ((allocflags & VM_ALLOC_ZERO) != 0 && + vm_page_none_valid(m)) { + pmap_zero_page(m); + vm_page_valid(m); + } } else { if ((allocflags & VM_ALLOC_NOCREAT) != 0) break; @@ -5245,12 +5250,11 @@ goto retrylookup; } ma[i] = m; - } - if (vm_page_none_valid(m) && - (allocflags & VM_ALLOC_ZERO) != 0) { - if ((m->flags & PG_ZERO) == 0) - pmap_zero_page(m); - vm_page_valid(m); + if ((allocflags & VM_ALLOC_ZERO) != 0) { + if ((m->flags & PG_ZERO) == 0) + pmap_zero_page(m); + vm_page_valid(m); + } } vm_page_grab_release(m, allocflags); } @@ -5288,8 +5292,7 @@ if (m == NULL) break; if ((flags & VM_ALLOC_ZERO) != 0 && vm_page_none_valid(m)) { - if ((m->flags & PG_ZERO) == 0) - pmap_zero_page(m); + pmap_zero_page(m); vm_page_valid(m); } /* m will still be wired or busy according to flags. */