git: 9147a0c93bc0 - main - pctrie: don't assign to root

From: Doug Moore <dougm_at_FreeBSD.org>
Date: Sun, 06 Oct 2024 20:11:31 UTC
The branch main has been updated by dougm:

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

commit 9147a0c93bc0b93d2d9d11e0a5a4a7358d04137a
Author:     Doug Moore <dougm@FreeBSD.org>
AuthorDate: 2024-10-06 20:10:10 +0000
Commit:     Doug Moore <dougm@FreeBSD.org>
CommitDate: 2024-10-06 20:10:10 +0000

    pctrie: don't assign to root
    
    User pctrie_root_store(*, PCTRIE_LOCKED) to change the root value of a
    pctrie, to ensure proper synchronization when smr is in use.
    
    Reviewed by:    alc
    Differential Revision:  https://reviews.freebsd.org/D46968
---
 sys/kern/subr_pctrie.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/sys/kern/subr_pctrie.c b/sys/kern/subr_pctrie.c
index b461ffa3c5be..a7b487166054 100644
--- a/sys/kern/subr_pctrie.c
+++ b/sys/kern/subr_pctrie.c
@@ -304,7 +304,8 @@ pctrie_insert_lookup_compound(struct pctrie *ptree, uint64_t *val,
 		if (pctrie_isleaf(node)) {
 			if (node == PCTRIE_NULL) {
 				if (parent == NULL)
-					ptree->pt_root = pctrie_toleaf(val);
+					pctrie_root_store(ptree,
+					    pctrie_toleaf(val), PCTRIE_LOCKED);
 				else
 					pctrie_addnode(parent, index,
 					    pctrie_toleaf(val), PCTRIE_LOCKED);
@@ -1242,7 +1243,8 @@ pctrie_replace(struct pctrie *ptree, uint64_t *newval)
 		if (pctrie_isleaf(node)) {
 			if ((m = pctrie_toval(node)) != NULL && *m == index) {
 				if (parent == NULL)
-					ptree->pt_root = leaf;
+					pctrie_root_store(ptree,
+					    leaf, PCTRIE_LOCKED);
 				else
 					pctrie_node_store(
 					    &parent->pn_child[slot], leaf,