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

Function vm_page_insert_after

freebsd/vm/vm_page.c:1515–1554  ·  view source on GitHub ↗

* vm_page_insert_after: * * Inserts the page "m" into the specified object at offset "pindex". * * The page "mpred" must immediately precede the offset "pindex" within * the specified object. * * The object must be locked. */

Source from the content-addressed store, hash-verified

1513 * The object must be locked.
1514 */
1515static int
1516vm_page_insert_after(vm_page_t m, vm_object_t object, vm_pindex_t pindex,
1517 vm_page_t mpred)
1518{
1519 vm_page_t msucc;
1520
1521 VM_OBJECT_ASSERT_WLOCKED(object);
1522 KASSERT(m->object == NULL,
1523 ("vm_page_insert_after: page already inserted"));
1524 if (mpred != NULL) {
1525 KASSERT(mpred->object == object,
1526 ("vm_page_insert_after: object doesn't contain mpred"));
1527 KASSERT(mpred->pindex < pindex,
1528 ("vm_page_insert_after: mpred doesn't precede pindex"));
1529 msucc = TAILQ_NEXT(mpred, listq);
1530 } else
1531 msucc = TAILQ_FIRST(&object->memq);
1532 if (msucc != NULL)
1533 KASSERT(msucc->pindex > pindex,
1534 ("vm_page_insert_after: msucc doesn't succeed pindex"));
1535
1536 /*
1537 * Record the object/offset pair in this page.
1538 */
1539 m->object = object;
1540 m->pindex = pindex;
1541 m->ref_count |= VPRC_OBJREF;
1542
1543 /*
1544 * Now link into the object's ordered list of backed pages.
1545 */
1546 if (vm_radix_insert(&object->rtree, m)) {
1547 m->object = NULL;
1548 m->pindex = 0;
1549 m->ref_count &= ~VPRC_OBJREF;
1550 return (1);
1551 }
1552 vm_page_insert_radixdone(m, object, mpred);
1553 return (0);
1554}
1555
1556/*
1557 * vm_page_insert_radixdone:

Callers 3

vm_page_insertFunction · 0.85

Calls 2

vm_radix_insertFunction · 0.85
vm_page_insert_radixdoneFunction · 0.85

Tested by

no test coverage detected