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