Simplify the implementation of the failure case in kmem_alloc_attr().
This commit is contained in:
parent
767a02dc14
commit
89a5842600
@ -258,8 +258,8 @@ kmem_alloc_attr(vm_map_t map, vm_size_t size, int flags, vm_paddr_t low,
|
||||
retry:
|
||||
m = vm_phys_alloc_contig(1, low, high, PAGE_SIZE, 0);
|
||||
if (m == NULL) {
|
||||
VM_OBJECT_UNLOCK(object);
|
||||
if (tries < ((flags & M_NOWAIT) != 0 ? 1 : 3)) {
|
||||
VM_OBJECT_UNLOCK(object);
|
||||
vm_map_unlock(map);
|
||||
vm_contig_grow_cache(tries, low, high);
|
||||
vm_map_lock(map);
|
||||
@ -267,13 +267,12 @@ retry:
|
||||
tries++;
|
||||
goto retry;
|
||||
}
|
||||
while (i != 0) {
|
||||
i -= PAGE_SIZE;
|
||||
m = vm_page_lookup(object, OFF_TO_IDX(offset +
|
||||
i));
|
||||
vm_page_free(m);
|
||||
}
|
||||
VM_OBJECT_UNLOCK(object);
|
||||
/*
|
||||
* Since the pages that were allocated by any previous
|
||||
* iterations of this loop are not busy, they can be
|
||||
* freed by vm_object_page_remove(), which is called
|
||||
* by vm_map_delete().
|
||||
*/
|
||||
vm_map_delete(map, addr, addr + size);
|
||||
vm_map_unlock(map);
|
||||
return (0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user