git: dd0e5c02ab13 - main - swap_pager: small improvement to find_least

From: Doug Moore <dougm_at_FreeBSD.org>
Date: Tue, 11 Jun 2024 16:38:49 UTC
The branch main has been updated by dougm:

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

commit dd0e5c02ab13b9eb240d42a71a8f41a8b036bd33
Author:     Doug Moore <dougm@FreeBSD.org>
AuthorDate: 2024-06-11 16:36:23 +0000
Commit:     Doug Moore <dougm@FreeBSD.org>
CommitDate: 2024-06-11 16:36:23 +0000

    swap_pager: small improvement to find_least
    
    Drop an unneeded test, a branch and a needless computation to save a
    few instructions.
    
    Reviewed by:    kib
    Differential Revision:  https://reviews.freebsd.org/D45558
---
 sys/vm/swap_pager.c | 19 +++++++------------
 1 file changed, 7 insertions(+), 12 deletions(-)

diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c
index a07a38481490..15f227457bba 100644
--- a/sys/vm/swap_pager.c
+++ b/sys/vm/swap_pager.c
@@ -2289,22 +2289,17 @@ swap_pager_find_least(vm_object_t object, vm_pindex_t pindex)
 	VM_OBJECT_ASSERT_LOCKED(object);
 	MPASS((object->flags & OBJ_SWAP) != 0);
 
-	if (pctrie_is_empty(&object->un_pager.swp.swp_blks))
-		return (object->size);
 	sb = SWAP_PCTRIE_LOOKUP_GE(&object->un_pager.swp.swp_blks,
 	    rounddown(pindex, SWAP_META_PAGES));
 	if (sb == NULL)
 		return (object->size);
-	if (sb->p < pindex) {
-		for (i = pindex % SWAP_META_PAGES; i < SWAP_META_PAGES; i++) {
-			if (sb->d[i] != SWAPBLK_NONE)
-				return (sb->p + i);
-		}
-		sb = SWAP_PCTRIE_LOOKUP_GE(&object->un_pager.swp.swp_blks,
-		    roundup(pindex, SWAP_META_PAGES));
-		if (sb == NULL)
-			return (object->size);
+	for (i = pindex - sb->p; i < SWAP_META_PAGES; i++) {
+		if (sb->d[i] != SWAPBLK_NONE)
+			return (sb->p + i);
 	}
+	sb = SWAP_PCTRIE_LOOKUP_GE(&object->un_pager.swp.swp_blks, pindex);
+	if (sb == NULL)
+		return (object->size);
 	for (i = 0; i < SWAP_META_PAGES; i++) {
 		if (sb->d[i] != SWAPBLK_NONE)
 			return (sb->p + i);
@@ -2314,7 +2309,7 @@ swap_pager_find_least(vm_object_t object, vm_pindex_t pindex)
 	 * We get here if a swblk is present in the trie but it
 	 * doesn't map any blocks.
 	 */
-	MPASS(0);
+	__unreachable();
 	return (object->size);
 }