diff options
author | dillon <dillon@FreeBSD.org> | 1999-01-24 01:06:31 +0000 |
---|---|---|
committer | dillon <dillon@FreeBSD.org> | 1999-01-24 01:06:31 +0000 |
commit | 5ba2ffcf3a9f66c329e3aa824fbae74e39a37c01 (patch) | |
tree | e9d04603fa3c0586410cb3fe228e269e05665968 /sys/vm/vm_pageout.c | |
parent | 84015ba9cbf32a56da8e0a35a1f0879597f4a674 (diff) | |
download | FreeBSD-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.c | 6 |
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++; |