git: cf681286d295 - main - Revert "vm_fault: use iterator in populate()"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 25 Apr 2025 06:14:44 UTC
The branch main has been updated by dougm:
URL: https://cgit.FreeBSD.org/src/commit/?id=cf681286d29540a0aa1adf2cbc119e6f877de3dc
commit cf681286d29540a0aa1adf2cbc119e6f877de3dc
Author: Doug Moore <dougm@FreeBSD.org>
AuthorDate: 2025-04-25 06:12:36 +0000
Commit: Doug Moore <dougm@FreeBSD.org>
CommitDate: 2025-04-25 06:12:36 +0000
Revert "vm_fault: use iterator in populate()"
This reverts commit 925906a61cafb44df8643e33aa781ba546e92082.
The effects of releasing and acquiring the object write lock
a few lines into the loop were not carefully considered.
Reported by: alc
---
sys/vm/vm_fault.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index 24fc457adcad..c096bfaffe73 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -497,7 +497,6 @@ vm_fault_populate_cleanup(vm_object_t object, vm_pindex_t first,
static enum fault_status
vm_fault_populate(struct faultstate *fs)
{
- struct pctrie_iter pages;
vm_offset_t vaddr;
vm_page_t m;
vm_pindex_t map_first, map_last, pager_first, pager_last, pidx;
@@ -624,10 +623,9 @@ vm_fault_populate(struct faultstate *fs)
pager_last);
pager_last = map_last;
}
- vm_page_iter_init(&pages, fs->first_object);
- for (pidx = pager_first, m = vm_radix_iter_lookup(&pages, pidx);
+ for (pidx = pager_first, m = vm_page_lookup(fs->first_object, pidx);
pidx <= pager_last;
- pidx += npages, m = vm_radix_iter_stride(&pages, npages)) {
+ pidx += npages, m = TAILQ_NEXT(&m[npages - 1], listq)) {
vaddr = fs->entry->start + IDX_TO_OFF(pidx) - fs->entry->offset;
KASSERT(m != NULL && m->pindex == pidx,
("%s: pindex mismatch", __func__));