svn commit: r227072 - head/sys/vm
Alan Cox
alc at FreeBSD.org
Fri Nov 4 04:41:59 UTC 2011
Author: alc
Date: Fri Nov 4 04:41:58 2011
New Revision: 227072
URL: http://svn.freebsd.org/changeset/base/227072
Log:
Simplify the implementation of the failure case in kmem_alloc_attr().
Modified:
head/sys/vm/vm_contig.c
Modified: head/sys/vm/vm_contig.c
==============================================================================
--- head/sys/vm/vm_contig.c Fri Nov 4 04:06:31 2011 (r227071)
+++ head/sys/vm/vm_contig.c Fri Nov 4 04:41:58 2011 (r227072)
@@ -258,8 +258,8 @@ kmem_alloc_attr(vm_map_t map, vm_size_t
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);
More information about the svn-src-all
mailing list