The branch main has been updated by dougm:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=d2acf0a447093dcf0805c75490e1cd989bc8c36c

commit d2acf0a447093dcf0805c75490e1cd989bc8c36c
Author:     Doug Moore <[email protected]>
AuthorDate: 2024-06-13 18:47:54 +0000
Commit:     Doug Moore <[email protected]>
CommitDate: 2024-06-13 18:52:25 +0000

    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
---
 sys/vm/swap_pager.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c
index 3bfda3eea169..c339f70ddea1 100644
--- a/sys/vm/swap_pager.c
+++ b/sys/vm/swap_pager.c
@@ -2220,8 +2220,11 @@ swp_pager_meta_free(vm_object_t object, vm_pindex_t 
pindex, vm_pindex_t count,
 }
 
 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++) {
                if (sb->d[i] != SWAPBLK_NONE)
                        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
 swp_pager_meta_free_all(vm_object_t object)
 {
-       struct swblk *sb;
        struct page_range range;
-       vm_pindex_t pindex;
 
        VM_OBJECT_ASSERT_WLOCKED(object);
 
        swp_pager_init_freerange(&range);
-       for (pindex = 0; (sb = SWAP_PCTRIE_LOOKUP_GE(
-           &object->un_pager.swp.swp_blks, pindex)) != NULL;) {
-               pindex = sb->p + SWAP_META_PAGES;
-               SWAP_PCTRIE_REMOVE(&object->un_pager.swp.swp_blks, sb->p);
-               swp_pager_meta_free_block(sb, &range);
-       }
+       SWAP_PCTRIE_RECLAIM_CALLBACK(&object->un_pager.swp.swp_blks,
+           swp_pager_meta_free_block, &range);
        swp_pager_freeswapspace(&range);
 }
 

Reply via email to