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

Function vm_object_scan_all_shadowed

freebsd/vm/vm_object.c:1676–1761  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1674}
1675
1676static bool
1677vm_object_scan_all_shadowed(vm_object_t object)
1678{
1679 vm_object_t backing_object;
1680 vm_page_t p, pp;
1681 vm_pindex_t backing_offset_index, new_pindex, pi, ps;
1682
1683 VM_OBJECT_ASSERT_WLOCKED(object);
1684 VM_OBJECT_ASSERT_WLOCKED(object->backing_object);
1685
1686 backing_object = object->backing_object;
1687
1688 if ((backing_object->flags & OBJ_ANON) == 0)
1689 return (false);
1690
1691 pi = backing_offset_index = OFF_TO_IDX(object->backing_object_offset);
1692 p = vm_page_find_least(backing_object, pi);
1693 ps = swap_pager_find_least(backing_object, pi);
1694
1695 /*
1696 * Only check pages inside the parent object's range and
1697 * inside the parent object's mapping of the backing object.
1698 */
1699 for (;; pi++) {
1700 if (p != NULL && p->pindex < pi)
1701 p = TAILQ_NEXT(p, listq);
1702 if (ps < pi)
1703 ps = swap_pager_find_least(backing_object, pi);
1704 if (p == NULL && ps >= backing_object->size)
1705 break;
1706 else if (p == NULL)
1707 pi = ps;
1708 else
1709 pi = MIN(p->pindex, ps);
1710
1711 new_pindex = pi - backing_offset_index;
1712 if (new_pindex >= object->size)
1713 break;
1714
1715 if (p != NULL) {
1716 /*
1717 * If the backing object page is busy a
1718 * grandparent or older page may still be
1719 * undergoing CoW. It is not safe to collapse
1720 * the backing object until it is quiesced.
1721 */
1722 if (vm_page_tryxbusy(p) == 0)
1723 return (false);
1724
1725 /*
1726 * We raced with the fault handler that left
1727 * newly allocated invalid page on the object
1728 * queue and retried.
1729 */
1730 if (!vm_page_all_valid(p))
1731 goto unbusy_ret;
1732 }
1733

Callers 1

vm_object_collapseFunction · 0.85

Calls 7

vm_page_find_leastFunction · 0.85
swap_pager_find_leastFunction · 0.85
vm_page_tryxbusyFunction · 0.85
vm_page_all_validFunction · 0.85
vm_page_lookupFunction · 0.85
vm_page_none_validFunction · 0.85
vm_pager_has_pageFunction · 0.85

Tested by

no test coverage detected