summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_pageout.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2012-10-13 20:19:43 +0000
committeralc <alc@FreeBSD.org>2012-10-13 20:19:43 +0000
commit1df941a7f390f4de081ce3749d4a55c796f7b3fc (patch)
tree8e8cac8d60b344bc1721cc3763b74d483509e9b5 /sys/vm/vm_pageout.c
parente323b9460e2fa343ab07a6a94df4bfbd183b449e (diff)
downloadFreeBSD-src-1df941a7f390f4de081ce3749d4a55c796f7b3fc.zip
FreeBSD-src-1df941a7f390f4de081ce3749d4a55c796f7b3fc.tar.gz
Move vm_page_requeue() to the only file that uses it.
MFC after: 3 weeks
Diffstat (limited to 'sys/vm/vm_pageout.c')
-rw-r--r--sys/vm/vm_pageout.c43
1 files changed, 32 insertions, 11 deletions
diff --git a/sys/vm/vm_pageout.c b/sys/vm/vm_pageout.c
index 87b4318..723fc72 100644
--- a/sys/vm/vm_pageout.c
+++ b/sys/vm/vm_pageout.c
@@ -218,6 +218,7 @@ static void vm_req_vmdaemon(int req);
#endif
static boolean_t vm_pageout_page_lock(vm_page_t, vm_page_t *);
static void vm_pageout_page_stats(void);
+static void vm_pageout_requeue(vm_page_t m);
/*
* Initialize a dummy page for marking the caller's place in the specified
@@ -749,7 +750,7 @@ vm_pageout_object_deactivate_pages(pmap_t pmap, vm_object_t first_object,
vm_page_deactivate(p);
} else {
vm_page_lock_queues();
- vm_page_requeue(p);
+ vm_pageout_requeue(p);
vm_page_unlock_queues();
}
} else {
@@ -758,7 +759,7 @@ vm_pageout_object_deactivate_pages(pmap_t pmap, vm_object_t first_object,
ACT_ADVANCE)
p->act_count += ACT_ADVANCE;
vm_page_lock_queues();
- vm_page_requeue(p);
+ vm_pageout_requeue(p);
vm_page_unlock_queues();
}
} else if (p->queue == PQ_INACTIVE)
@@ -855,6 +856,26 @@ vm_pageout_map_deactivate_pages(map, desired)
#endif /* !defined(NO_SWAPPING) */
/*
+ * vm_pageout_requeue:
+ *
+ * Move the specified page to the tail of its present page queue.
+ *
+ * The page queues must be locked.
+ */
+static void
+vm_pageout_requeue(vm_page_t m)
+{
+ struct vpgqueues *vpq;
+
+ mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ KASSERT(m->queue != PQ_NONE,
+ ("vm_pageout_requeue: page %p is not queued", m));
+ vpq = &vm_page_queues[m->queue];
+ TAILQ_REMOVE(&vpq->pl, m, pageq);
+ TAILQ_INSERT_TAIL(&vpq->pl, m, pageq);
+}
+
+/*
* vm_pageout_scan does the dirty work for the pageout daemon.
*/
static void
@@ -1097,7 +1118,7 @@ vm_pageout_scan(int pass)
m->flags |= PG_WINATCFLS;
vm_page_lock_queues();
queues_locked = TRUE;
- vm_page_requeue(m);
+ vm_pageout_requeue(m);
} else if (maxlaunder > 0) {
/*
* We always want to try to flush some dirty pages if
@@ -1128,7 +1149,7 @@ vm_pageout_scan(int pass)
vm_page_unlock(m);
VM_OBJECT_UNLOCK(object);
queues_locked = TRUE;
- vm_page_requeue(m);
+ vm_pageout_requeue(m);
goto relock_queues;
}
@@ -1216,7 +1237,7 @@ vm_pageout_scan(int pass)
*/
if (m->hold_count) {
vm_page_unlock(m);
- vm_page_requeue(m);
+ vm_pageout_requeue(m);
if (object->flags & OBJ_MIGHTBEDIRTY)
vnodes_skipped++;
goto unlock_and_continue;
@@ -1321,7 +1342,7 @@ relock_queues:
(m->hold_count != 0)) {
vm_page_unlock(m);
VM_OBJECT_UNLOCK(object);
- vm_page_requeue(m);
+ vm_pageout_requeue(m);
m = next;
continue;
}
@@ -1358,7 +1379,7 @@ relock_queues:
* page activation count stats.
*/
if (actcount && (object->ref_count != 0)) {
- vm_page_requeue(m);
+ vm_pageout_requeue(m);
} else {
m->act_count -= min(m->act_count, ACT_DECLINE);
if (vm_pageout_algorithm ||
@@ -1376,7 +1397,7 @@ relock_queues:
vm_page_deactivate(m);
}
} else {
- vm_page_requeue(m);
+ vm_pageout_requeue(m);
}
}
vm_page_unlock(m);
@@ -1588,7 +1609,7 @@ vm_pageout_page_stats()
(m->hold_count != 0)) {
vm_page_unlock(m);
VM_OBJECT_UNLOCK(object);
- vm_page_requeue(m);
+ vm_pageout_requeue(m);
m = next;
continue;
}
@@ -1604,7 +1625,7 @@ vm_pageout_page_stats()
m->act_count += ACT_ADVANCE + actcount;
if (m->act_count > ACT_MAX)
m->act_count = ACT_MAX;
- vm_page_requeue(m);
+ vm_pageout_requeue(m);
} else {
if (m->act_count == 0) {
/*
@@ -1620,7 +1641,7 @@ vm_pageout_page_stats()
vm_page_deactivate(m);
} else {
m->act_count -= min(m->act_count, ACT_DECLINE);
- vm_page_requeue(m);
+ vm_pageout_requeue(m);
}
}
vm_page_unlock(m);
OpenPOWER on IntegriCloud