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