Simplify the implementation of the failure case in kmem_alloc_attr().

This commit is contained in:
alc 2011-11-04 04:41:58 +00:00
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);