git: 14efeab6adba - main - vm_grab: reset iter after alloc failure
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 10 Apr 2025 07:09:50 UTC
The branch main has been updated by dougm: URL: https://cgit.FreeBSD.org/src/commit/?id=14efeab6adbabe95f3b18f00d02dae550dbfc7f3 commit 14efeab6adbabe95f3b18f00d02dae550dbfc7f3 Author: Doug Moore <dougm@FreeBSD.org> AuthorDate: 2025-04-10 07:06:38 +0000 Commit: Doug Moore <dougm@FreeBSD.org> CommitDate: 2025-04-10 07:06:38 +0000 vm_grab: reset iter after alloc failure After vm_page_grab_lookup fails to find a page, and vm_page_alloc_after fails to allocate one, reset the pages iterator which is invalidated by a release/acquire of the object write lock within the allocation code. Reported by: pho Reviewed by: kib Fixes: 7becd87c988c ("vm_grab: use iterator for grab lookup") Differential Revision: https://reviews.freebsd.org/D49755 --- sys/vm/vm_page.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c index f9653f1d1ec9..741c45490d96 100644 --- a/sys/vm/vm_page.c +++ b/sys/vm/vm_page.c @@ -4882,6 +4882,7 @@ vm_page_grab(vm_object_t object, vm_pindex_t pindex, int allocflags) if ((allocflags & (VM_ALLOC_NOWAIT | VM_ALLOC_WAITFAIL)) != 0) return (NULL); + pctrie_iter_reset(&pages); } vm_page_grab_release(m, allocflags); @@ -5124,6 +5125,7 @@ vm_page_grab_zero_partial(vm_object_t object, vm_pindex_t pindex, int base, vm_page_launder(m); break; } + pctrie_iter_reset(&pages); } pmap_zero_page_area(m, base, end - base);