summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/vm/vm_pageout.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index dce3aad..3e019fb 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -408,10 +408,13 @@ more:
ib = 0;
break;
}
- vm_page_lock(p);
vm_page_test_dirty(p);
- if (p->dirty == 0 ||
- p->queue != PQ_INACTIVE ||
+ if (p->dirty == 0) {
+ ib = 0;
+ break;
+ }
+ vm_page_lock(p);
+ if (p->queue != PQ_INACTIVE ||
p->hold_count != 0) { /* may be undergoing I/O */
vm_page_unlock(p);
ib = 0;
@@ -435,10 +438,11 @@ more:
if ((p = vm_page_next(ps)) == NULL || vm_page_busied(p))
break;
- vm_page_lock(p);
vm_page_test_dirty(p);
- if (p->dirty == 0 ||
- p->queue != PQ_INACTIVE ||
+ if (p->dirty == 0)
+ break;
+ vm_page_lock(p);
+ if (p->queue != PQ_INACTIVE ||
p->hold_count != 0) { /* may be undergoing I/O */
vm_page_unlock(p);
break;
OpenPOWER on IntegriCloud