Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 Nov 2011 04:41:58 +0000 (UTC)
From:      Alan Cox <alc@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r227072 - head/sys/vm
Message-ID:  <201111040441.pA44fwGc001669@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201111040441.pA44fwGc001669>