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__));