mirror of
https://github.com/opnsense/src.git
synced 2026-06-08 16:22:46 -04:00
Move the per-thread deferred user map entries list into a private list
in vm_map_process_deferred() which is then iterated to release map entries. This avoids having a nested vm map unlock operation called from the loop body attempt to recuse into vm_map_process_deferred(). This can happen if the vm_map_remove() triggers the OOM killer. Reviewed by: alc, kib MFC after: 1 week
This commit is contained in:
parent
f89d8b9a0f
commit
6fbe60fa8b
1 changed files with 6 additions and 3 deletions
|
|
@ -475,12 +475,14 @@ static void
|
|||
vm_map_process_deferred(void)
|
||||
{
|
||||
struct thread *td;
|
||||
vm_map_entry_t entry;
|
||||
vm_map_entry_t entry, next;
|
||||
vm_object_t object;
|
||||
|
||||
td = curthread;
|
||||
while ((entry = td->td_map_def_user) != NULL) {
|
||||
td->td_map_def_user = entry->next;
|
||||
entry = td->td_map_def_user;
|
||||
td->td_map_def_user = NULL;
|
||||
while (entry != NULL) {
|
||||
next = entry->next;
|
||||
if ((entry->eflags & MAP_ENTRY_VN_WRITECNT) != 0) {
|
||||
/*
|
||||
* Decrement the object's writemappings and
|
||||
|
|
@ -494,6 +496,7 @@ vm_map_process_deferred(void)
|
|||
entry->end);
|
||||
}
|
||||
vm_map_entry_deallocate(entry, FALSE);
|
||||
entry = next;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue