Page MenuHomeFreeBSD

D36839.diff
No OneTemporary

D36839.diff

diff --git a/sys/vm/vm_page.c b/sys/vm/vm_page.c
--- a/sys/vm/vm_page.c
+++ b/sys/vm/vm_page.c
@@ -4141,7 +4141,12 @@
if (nqueue == PQ_ACTIVE)
new.act_count = max(old.act_count, ACT_INIT);
if (old.queue == nqueue) {
- if (nqueue != PQ_ACTIVE)
+ /*
+ * There is no need to requeue pages already in the
+ * active queue.
+ */
+ if (nqueue != PQ_ACTIVE ||
+ (old.flags & PGA_ENQUEUED) == 0)
new.flags |= nflag;
} else {
new.flags |= nflag;
@@ -4238,7 +4243,8 @@
* referenced and avoid any queue operations.
*/
new.flags &= ~PGA_QUEUE_OP_MASK;
- if (nflag != PGA_REQUEUE_HEAD && old.queue == PQ_ACTIVE)
+ if (nflag != PGA_REQUEUE_HEAD && old.queue == PQ_ACTIVE &&
+ (old.flags & PGA_ENQUEUED) != 0)
new.flags |= PGA_REFERENCED;
else {
new.flags |= nflag;

File Metadata

Mime Type
text/plain
Expires
Thu, May 1, 1:05 PM (18 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17881836
Default Alt Text
D36839.diff (824 B)

Event Timeline