See vm_page_release(). */
| 4217 | |
| 4218 | /* See vm_page_release(). */ |
| 4219 | void |
| 4220 | vm_page_release_locked(vm_page_t m, int flags) |
| 4221 | { |
| 4222 | |
| 4223 | VM_OBJECT_ASSERT_WLOCKED(m->object); |
| 4224 | KASSERT((m->oflags & VPO_UNMANAGED) == 0, |
| 4225 | ("vm_page_release_locked: page %p is unmanaged", m)); |
| 4226 | |
| 4227 | if (vm_page_unwire_noq(m)) { |
| 4228 | if ((flags & VPR_TRYFREE) != 0 && |
| 4229 | (m->object->ref_count == 0 || !pmap_page_is_mapped(m)) && |
| 4230 | m->dirty == 0 && vm_page_tryxbusy(m)) { |
| 4231 | /* |
| 4232 | * An unlocked lookup may have wired the page before the |
| 4233 | * busy lock was acquired, in which case the page must |
| 4234 | * not be freed. |
| 4235 | */ |
| 4236 | if (__predict_true(!vm_page_wired(m))) { |
| 4237 | vm_page_free(m); |
| 4238 | return; |
| 4239 | } |
| 4240 | vm_page_xunbusy(m); |
| 4241 | } else { |
| 4242 | vm_page_release_toq(m, PQ_INACTIVE, flags != 0); |
| 4243 | } |
| 4244 | } |
| 4245 | } |
| 4246 | |
| 4247 | static bool |
| 4248 | vm_page_try_blocked_op(vm_page_t m, void (*op)(vm_page_t)) |
no test coverage detected