* 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. */
| 1513 | * The object must be locked. |
| 1514 | */ |
| 1515 | static int |
| 1516 | vm_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: |
no test coverage detected