* vm_page_insert_radixdone: * * Complete page "m" insertion into the specified object after the * radix trie hooking. * * The page "mpred" must precede the offset "m->pindex" within the * specified object. * * The object must be locked. */
| 1565 | * The object must be locked. |
| 1566 | */ |
| 1567 | static void |
| 1568 | vm_page_insert_radixdone(vm_page_t m, vm_object_t object, vm_page_t mpred) |
| 1569 | { |
| 1570 | |
| 1571 | VM_OBJECT_ASSERT_WLOCKED(object); |
| 1572 | KASSERT(object != NULL && m->object == object, |
| 1573 | ("vm_page_insert_radixdone: page %p has inconsistent object", m)); |
| 1574 | KASSERT((m->ref_count & VPRC_OBJREF) != 0, |
| 1575 | ("vm_page_insert_radixdone: page %p is missing object ref", m)); |
| 1576 | if (mpred != NULL) { |
| 1577 | KASSERT(mpred->object == object, |
| 1578 | ("vm_page_insert_radixdone: object doesn't contain mpred")); |
| 1579 | KASSERT(mpred->pindex < m->pindex, |
| 1580 | ("vm_page_insert_radixdone: mpred doesn't precede pindex")); |
| 1581 | } |
| 1582 | |
| 1583 | if (mpred != NULL) |
| 1584 | TAILQ_INSERT_AFTER(&object->memq, mpred, m, listq); |
| 1585 | else |
| 1586 | TAILQ_INSERT_HEAD(&object->memq, m, listq); |
| 1587 | |
| 1588 | /* |
| 1589 | * Show that the object has one more resident page. |
| 1590 | */ |
| 1591 | object->resident_page_count++; |
| 1592 | |
| 1593 | /* |
| 1594 | * Hold the vnode until the last page is released. |
| 1595 | */ |
| 1596 | if (object->resident_page_count == 1 && object->type == OBJT_VNODE) |
| 1597 | vhold(object->handle); |
| 1598 | |
| 1599 | /* |
| 1600 | * Since we are inserting a new and possibly dirty page, |
| 1601 | * update the object's generation count. |
| 1602 | */ |
| 1603 | if (pmap_page_is_write_mapped(m)) |
| 1604 | vm_object_set_writeable_dirty(object); |
| 1605 | } |
| 1606 | |
| 1607 | /* |
| 1608 | * Do the work to remove a page from its object. The caller is responsible for |
no test coverage detected