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

Function swp_pager_meta_transfer

freebsd/vm/swap_pager.c:2111–2155  ·  view source on GitHub ↗

* SWP_PAGER_META_TRANSFER() - free a range of blocks in the srcobject's swap * metadata, or transfer it into dstobject. * * This routine will free swap metadata structures as they are cleaned * out. */

Source from the content-addressed store, hash-verified

2109 * out.
2110 */
2111static void
2112swp_pager_meta_transfer(vm_object_t srcobject, vm_object_t dstobject,
2113 vm_pindex_t pindex, vm_pindex_t count)
2114{
2115 struct swblk *sb;
2116 daddr_t n_free, s_free;
2117 vm_pindex_t offset, last;
2118 int i, limit, start;
2119
2120 VM_OBJECT_ASSERT_WLOCKED(srcobject);
2121 if (srcobject->type != OBJT_SWAP || count == 0)
2122 return;
2123
2124 swp_pager_init_freerange(&s_free, &n_free);
2125 offset = pindex;
2126 last = pindex + count;
2127 for (;;) {
2128 sb = SWAP_PCTRIE_LOOKUP_GE(&srcobject->un_pager.swp.swp_blks,
2129 rounddown(pindex, SWAP_META_PAGES));
2130 if (sb == NULL || sb->p >= last)
2131 break;
2132 start = pindex > sb->p ? pindex - sb->p : 0;
2133 limit = last - sb->p < SWAP_META_PAGES ? last - sb->p :
2134 SWAP_META_PAGES;
2135 for (i = start; i < limit; i++) {
2136 if (sb->d[i] == SWAPBLK_NONE)
2137 continue;
2138 if (dstobject == NULL ||
2139 !swp_pager_xfer_source(srcobject, dstobject,
2140 sb->p + i - offset, sb->d[i])) {
2141 swp_pager_update_freerange(&s_free, &n_free,
2142 sb->d[i]);
2143 }
2144 sb->d[i] = SWAPBLK_NONE;
2145 }
2146 pindex = sb->p + SWAP_META_PAGES;
2147 if (swp_pager_swblk_empty(sb, 0, start) &&
2148 swp_pager_swblk_empty(sb, limit, SWAP_META_PAGES)) {
2149 SWAP_PCTRIE_REMOVE(&srcobject->un_pager.swp.swp_blks,
2150 sb->p);
2151 uma_zfree(swblk_zone, sb);
2152 }
2153 }
2154 swp_pager_freeswapspace(s_free, n_free);
2155}
2156
2157/*
2158 * SWP_PAGER_META_FREE() - free a range of blocks in the object's swap metadata

Callers 2

swap_pager_copyFunction · 0.85
swp_pager_meta_freeFunction · 0.85

Calls 6

swp_pager_init_freerangeFunction · 0.85
swp_pager_xfer_sourceFunction · 0.85
swp_pager_swblk_emptyFunction · 0.85
swp_pager_freeswapspaceFunction · 0.85
uma_zfreeFunction · 0.70

Tested by

no test coverage detected