MCPcopy Create free account
hub / github.com/F-Stack/f-stack / vm_page_insert_radixdone

Function vm_page_insert_radixdone

freebsd/vm/vm_page.c:1567–1605  ·  view source on GitHub ↗

* 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. */

Source from the content-addressed store, hash-verified

1565 * The object must be locked.
1566 */
1567static void
1568vm_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

Callers 2

vm_page_insert_afterFunction · 0.85
vm_page_renameFunction · 0.85

Calls 2

vholdFunction · 0.85

Tested by

no test coverage detected