Page MenuHomeFreeBSD

Clear queue operation flags when migrating a page to another queue.
ClosedPublic

Authored by markj on Jan 2 2020, 2:27 PM.

Details

Summary

The page daemon loops may move pages back to the active queue if
references are detected. In this case we must take care to clear
existing queue operation flags. In particular, PGA_REQUEUE_HEAD may be
set, and that flag is only valid if the page belongs to the inactive
queue.

Note that in each updated loop we have already checked for PGA_DEQUEUE.
So, when clearing PGA_QUEUE_OP_MASK we are really only clearing
(PGA_REQUEUE | PGA_REQUEUE_HEAD).

In a follow-up patch I will add a function to wrap updates to "new".

Also fix a bug in the active queue scan where we were updating "old"
instead of "new". This would only have been hit in rare cases where the
page moved out of the active queue after the beginning of the scan.

Diff Detail

Repository
rS FreeBSD src repository
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

markj created this revision.Jan 2 2020, 2:27 PM
kib accepted this revision.Jan 2 2020, 5:30 PM
This revision is now accepted and ready to land.Jan 2 2020, 5:30 PM
alc accepted this revision.Jan 2 2020, 6:16 PM