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);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to