Page MenuHomeFreeBSD

vm_page: Fix a logic bug in vm_page_unwire_managed()
AcceptedPublic

Authored by markj on Fri, Oct 4, 3:08 PM.
Tags
None
Referenced Files
F98837398: D46944.diff
Fri, Oct 4, 10:44 PM
F98834521: D46944.diff
Fri, Oct 4, 10:16 PM
F98834479: D46944.id.diff
Fri, Oct 4, 10:15 PM
F98834474: D46944.id144251.diff
Fri, Oct 4, 10:15 PM
Subscribers

Details

Reviewers
alc
kib
dougm
Summary

When releasing a page reference, we have logic for various cases, based
on the value of the counter. But, the implementation fails to take into
account the possibility that the VPRC_BLOCKED flag is set, which is ORed
into the counter for short windows when removing mappings of a page. If
the flag is set while the last reference is being released, we may fail
to add the page to a page queue when the last wiring reference is
released.

Fix the problem by performing comparisons with VPRC_BLOCKED masked off.
While here, add a related assertion.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 59758
Build 56644: arc lint + arc unit