svn commit: r327359 - head/sys/vm

Konstantin Belousov kib at FreeBSD.org
Fri Dec 29 20:33:57 UTC 2017


Author: kib
Date: Fri Dec 29 20:33:56 2017
New Revision: 327359
URL: https://svnweb.freebsd.org/changeset/base/327359

Log:
  Do not lock vm map in swapout_procs().
  
  Neither swapout_procs() nor swapout() access the map.  Since the
  process' vmspace is referenced only to obtain the pointer to the
  vm_map, the reference is not needed as well.
  
  Reviewed by:	alc
  Sponsored by:	The FreeBSD Foundation
  MFC after:	1 week
  Differential revision:	https://reviews.freebsd.org/D13681

Modified:
  head/sys/vm/vm_swapout.c

Modified: head/sys/vm/vm_swapout.c
==============================================================================
--- head/sys/vm/vm_swapout.c	Fri Dec 29 20:30:10 2017	(r327358)
+++ head/sys/vm/vm_swapout.c	Fri Dec 29 20:33:56 2017	(r327359)
@@ -729,7 +729,6 @@ swapout_procs(int action)
 {
 	struct proc *p;
 	struct thread *td;
-	struct vmspace *vm;
 	int minslptime, slptime;
 	bool didswap;
 
@@ -763,24 +762,6 @@ retry:
 		PROC_UNLOCK(p);
 		sx_sunlock(&allproc_lock);
 
-		/*
-		 * Do not swapout a process that
-		 * is waiting for VM data
-		 * structures as there is a possible
-		 * deadlock.  Test this first as
-		 * this may block.
-		 *
-		 * Lock the map until swapout
-		 * finishes, or a thread of this
-		 * process may attempt to alter
-		 * the map.
-		 */
-		vm = vmspace_acquire_ref(p);
-		if (vm == NULL)
-			goto nextproc2;
-		if (!vm_map_trylock(&vm->vm_map))
-			goto nextproc1;
-
 		PROC_LOCK(p);
 		if (p->p_lock != 1 || (p->p_flag & (P_STOPPED_SINGLE |
 		    P_TRACED | P_SYSTEM)) != 0)
@@ -867,17 +848,11 @@ retry:
 				if (swapout(p) == 0)
 					didswap = true;
 				PROC_UNLOCK(p);
-				vm_map_unlock(&vm->vm_map);
-				vmspace_free(vm);
 				goto retry;
 			}
 		}
 nextproc:
 		PROC_UNLOCK(p);
-		vm_map_unlock(&vm->vm_map);
-nextproc1:
-		vmspace_free(vm);
-nextproc2:
 		sx_slock(&allproc_lock);
 		PRELE(p);
 	}


More information about the svn-src-all mailing list