summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_pageout.c
diff options
context:
space:
mode:
authordillon <dillon@FreeBSD.org>1999-01-24 01:06:31 +0000
committerdillon <dillon@FreeBSD.org>1999-01-24 01:06:31 +0000
commit5ba2ffcf3a9f66c329e3aa824fbae74e39a37c01 (patch)
treee9d04603fa3c0586410cb3fe228e269e05665968 /sys/vm/vm_pageout.c
parent84015ba9cbf32a56da8e0a35a1f0879597f4a674 (diff)
downloadFreeBSD-src-5ba2ffcf3a9f66c329e3aa824fbae74e39a37c01.zip
FreeBSD-src-5ba2ffcf3a9f66c329e3aa824fbae74e39a37c01.tar.gz
It is possible for a page in the cache to be busy. vm_pageout.c was not
checking for this condition while it tried to free cache pages. Fixed.
Diffstat (limited to 'sys/vm/vm_pageout.c')
-rw-r--r--sys/vm/vm_pageout.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index b5f4f47..29b4611 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -65,7 +65,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
- * $Id: vm_pageout.c,v 1.130 1999/01/21 08:29:12 dillon Exp $
+ * $Id: vm_pageout.c,v 1.131 1999/01/21 10:12:54 dillon Exp $
*/
/*
@@ -1082,6 +1082,10 @@ rescan0:
m = vm_page_list_find(PQ_CACHE, cache_rover);
if (!m)
break;
+ if ((m->flags & PG_BUSY) || m->busy || m->hold_count || m->wire_count) {
+ vm_page_deactivate(m);
+ continue;
+ }
cache_rover = (cache_rover + PQ_PRIME2) & PQ_L2_MASK;
vm_pageout_page_free(m);
cnt.v_dfree++;
OpenPOWER on IntegriCloud