mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-21 18:27:22 +00:00
swap_pager: pctrie_reclaim_cb in meta_free_all
Replace the lookup-remove loop in swp_pager_meta_free_all with a call to SWAP_PCTRIE_RECLAIM_CALLBACK, to eliminate repeated trie searches. Reviewed by: rlibby Differential Revision: https://reviews.freebsd.org/D45583
This commit is contained in:
parent
c0d0bc2bed
commit
d2acf0a447
|
@ -2220,8 +2220,11 @@ swp_pager_meta_free(vm_object_t object, vm_pindex_t pindex, vm_pindex_t count,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
swp_pager_meta_free_block(struct swblk *sb, struct page_range *range)
|
swp_pager_meta_free_block(void *sbv, void *rangev)
|
||||||
{
|
{
|
||||||
|
struct swblk *sb = sbv;
|
||||||
|
struct page_range *range = rangev;
|
||||||
|
|
||||||
for (int i = 0; i < SWAP_META_PAGES; i++) {
|
for (int i = 0; i < SWAP_META_PAGES; i++) {
|
||||||
if (sb->d[i] != SWAPBLK_NONE)
|
if (sb->d[i] != SWAPBLK_NONE)
|
||||||
swp_pager_update_freerange(range, sb->d[i]);
|
swp_pager_update_freerange(range, sb->d[i]);
|
||||||
|
@ -2238,19 +2241,13 @@ swp_pager_meta_free_block(struct swblk *sb, struct page_range *range)
|
||||||
static void
|
static void
|
||||||
swp_pager_meta_free_all(vm_object_t object)
|
swp_pager_meta_free_all(vm_object_t object)
|
||||||
{
|
{
|
||||||
struct swblk *sb;
|
|
||||||
struct page_range range;
|
struct page_range range;
|
||||||
vm_pindex_t pindex;
|
|
||||||
|
|
||||||
VM_OBJECT_ASSERT_WLOCKED(object);
|
VM_OBJECT_ASSERT_WLOCKED(object);
|
||||||
|
|
||||||
swp_pager_init_freerange(&range);
|
swp_pager_init_freerange(&range);
|
||||||
for (pindex = 0; (sb = SWAP_PCTRIE_LOOKUP_GE(
|
SWAP_PCTRIE_RECLAIM_CALLBACK(&object->un_pager.swp.swp_blks,
|
||||||
&object->un_pager.swp.swp_blks, pindex)) != NULL;) {
|
swp_pager_meta_free_block, &range);
|
||||||
pindex = sb->p + SWAP_META_PAGES;
|
|
||||||
SWAP_PCTRIE_REMOVE(&object->un_pager.swp.swp_blks, sb->p);
|
|
||||||
swp_pager_meta_free_block(sb, &range);
|
|
||||||
}
|
|
||||||
swp_pager_freeswapspace(&range);
|
swp_pager_freeswapspace(&range);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue