Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 26 Jun 2025 22:54:53 GMT
From:      Doug Moore <dougm@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 725eb0f85ea9 - main - pctrie: drop freenode param to pctrie_remove
Message-ID:  <202506262254.55QMsrVm015017@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by dougm:

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

commit 725eb0f85ea9fb0c5745efe789f7dcfb1e9d78b3
Author:     Doug Moore <dougm@FreeBSD.org>
AuthorDate: 2025-06-26 22:53:43 +0000
Commit:     Doug Moore <dougm@FreeBSD.org>
CommitDate: 2025-06-26 22:53:43 +0000

    pctrie: drop freenode param to pctrie_remove
    
    Drop the freenode argument to pctrie_remove, and instead return a bool
    to the caller so that the caller can set a freenode value to NULL or
    something else.
    
    Reviewed by:    alc, markj, kib
    Differential Revision:  https://reviews.freebsd.org/D51057
---
 sys/kern/subr_pctrie.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/sys/kern/subr_pctrie.c b/sys/kern/subr_pctrie.c
index 194e96ced471..3a3548bad52b 100644
--- a/sys/kern/subr_pctrie.c
+++ b/sys/kern/subr_pctrie.c
@@ -872,19 +872,17 @@ pctrie_iter_jump_le(struct pctrie_iter *it, int64_t jump)
  * 'node'.  If doing so causes 'node' to have only one child, purge it from the
  * pctrie and save it in *freenode for later disposal.
  */
-static void
-pctrie_remove(struct pctrie *ptree, struct pctrie_node *node, uint64_t index,
-    struct pctrie_node **freenode)
+static bool
+pctrie_remove(struct pctrie *ptree, struct pctrie_node *node, uint64_t index)
 {
 	smr_pctnode_t *parentp;
 	struct pctrie_node *child;
 	int slot;
 
-	*freenode = NULL;
 	parentp = pctrie_child(ptree, node, index);
 	if (node == NULL) {
 		pctrie_node_store(parentp, PCTRIE_NULL, PCTRIE_LOCKED);
-		return;
+		return (false);
 	}
 	slot = pctrie_slot(node, index);
 	KASSERT((node->pn_popmap & (1 << slot)) != 0,
@@ -893,12 +891,11 @@ pctrie_remove(struct pctrie *ptree, struct pctrie_node *node, uint64_t index,
 	node->pn_popmap ^= 1 << slot;
 	if (!powerof2(node->pn_popmap)) {
 		pctrie_node_store(parentp, PCTRIE_NULL, PCTRIE_LOCKED);
-		return;
+		return (false);
 	}
 	pctrie_node_store(parentp, PCTRIE_NULL, PCTRIE_UNSERIALIZED);
 	KASSERT(node->pn_popmap != 0, ("%s: bad popmap all zeroes", __func__));
 	slot = ffs(node->pn_popmap) - 1;
-	*freenode = node;
 	child = pctrie_node_load(&node->pn_child[slot], NULL, PCTRIE_LOCKED);
 	KASSERT(child != PCTRIE_NULL,
 	    ("%s: bad popmap slot %d in node %p", __func__, slot, node));
@@ -907,6 +904,7 @@ pctrie_remove(struct pctrie *ptree, struct pctrie_node *node, uint64_t index,
 		pctrie_setparent(child, node);
 	parentp = pctrie_child(ptree, node, index);
 	pctrie_node_store(parentp, child, PCTRIE_LOCKED);
+	return (true);
 }
 
 /*
@@ -923,8 +921,8 @@ pctrie_remove_lookup(struct pctrie *ptree, uint64_t index,
 	node = _pctrie_lookup_node(ptree, NULL, index, &parent, NULL,
 	    PCTRIE_LOCKED);
 	m = pctrie_match_value(node, index);
-	if (m != NULL)
-		pctrie_remove(ptree, parent, index, freenode);
+	if (m != NULL && pctrie_remove(ptree, parent, index))
+		*freenode = parent;
 	else
 		*freenode = NULL;
 	return (m);
@@ -941,9 +939,11 @@ pctrie_iter_remove(struct pctrie_iter *it, struct pctrie_node **freenode)
 	    it->ptree, it->node, it->index), NULL, PCTRIE_LOCKED), it->index),
 	    ("%s: removing value %jx not at iter", __func__,
 	    (uintmax_t)it->index));
-	pctrie_remove(it->ptree, it->node, it->index, freenode);
-	if (*freenode != NULL)
+	if (pctrie_remove(it->ptree, it->node, it->index)) {
+		*freenode = it->node;
 		it->node = pctrie_parent(it->node);
+	} else
+		*freenode = NULL;
 }
 
 /*



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202506262254.55QMsrVm015017>