From 7e7d8bece766cbeedae115a99bb2f041b8b6950a Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Mon, 4 Aug 2025 14:31:59 -0700 Subject: [PATCH 1/9] remove obsolete dns_db_setloop() no database implementation has needed an event loop since the RBT cache was removed, so the setloop API call is no longer needed. --- bin/tests/system/dyndb/driver/db.c | 10 ---------- lib/dns/cache.c | 6 ------ lib/dns/db.c | 9 --------- lib/dns/include/dns/db.h | 11 ----------- lib/dns/qpzone.c | 25 ------------------------- lib/dns/sdlz.c | 7 ------- lib/dns/zone.c | 3 --- 7 files changed, 71 deletions(-) diff --git a/bin/tests/system/dyndb/driver/db.c b/bin/tests/system/dyndb/driver/db.c index 23de0c79ab..77534d9878 100644 --- a/bin/tests/system/dyndb/driver/db.c +++ b/bin/tests/system/dyndb/driver/db.c @@ -284,15 +284,6 @@ nodecount(dns_db_t *db, dns_dbtree_t tree) { return dns_db_nodecount(sampledb->db, tree); } -static void -setloop(dns_db_t *db, isc_loop_t *loop) { - sampledb_t *sampledb = (sampledb_t *)db; - - REQUIRE(VALID_SAMPLEDB(sampledb)); - - dns_db_setloop(sampledb->db, loop); -} - static isc_result_t getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) { sampledb_t *sampledb = (sampledb_t *)db; @@ -410,7 +401,6 @@ static dns_dbmethods_t sampledb_methods = { .deleterdataset = deleterdataset, .issecure = issecure, .nodecount = nodecount, - .setloop = setloop, .getoriginnode = getoriginnode, .getnsec3parameters = getnsec3parameters, .findnsec3node = findnsec3node, diff --git a/lib/dns/cache.c b/lib/dns/cache.c index faf414b379..83a8e494a9 100644 --- a/lib/dns/cache.c +++ b/lib/dns/cache.c @@ -130,12 +130,6 @@ cache_create_db(dns_cache_t *cache, dns_db_t **dbp, isc_mem_t **tmctxp, dns_db_setmaxrrperset(db, cache->maxrrperset); dns_db_setmaxtypepername(db, cache->maxtypepername); - /* - * XXX this is only used by the RBT cache, and can - * be removed when it is. - */ - dns_db_setloop(db, isc_loop_main()); - *dbp = db; *hmctxp = hmctx; *tmctxp = tmctx; diff --git a/lib/dns/db.c b/lib/dns/db.c index acb8051e39..c9f3363a34 100644 --- a/lib/dns/db.c +++ b/lib/dns/db.c @@ -811,15 +811,6 @@ dns_db_hashsize(dns_db_t *db) { return (db->methods->hashsize)(db); } -void -dns_db_setloop(dns_db_t *db, isc_loop_t *loop) { - REQUIRE(DNS_DB_VALID(db)); - - if (db->methods->setloop != NULL) { - (db->methods->setloop)(db, loop); - } -} - isc_result_t dns_db_register(const char *name, dns_dbcreatefunc_t create, void *driverarg, isc_mem_t *mctx, dns_dbimplementation_t **dbimp) { diff --git a/lib/dns/include/dns/db.h b/lib/dns/include/dns/db.h index cc80d5fa7b..6b6f742753 100644 --- a/lib/dns/include/dns/db.h +++ b/lib/dns/include/dns/db.h @@ -142,7 +142,6 @@ typedef struct dns_db_methods { dns_rdatatype_t covers DNS__DB_FLARG); bool (*issecure)(dns_db_t *db); unsigned int (*nodecount)(dns_db_t *db, dns_dbtree_t); - void (*setloop)(dns_db_t *db, isc_loop_t *); isc_result_t (*getoriginnode)(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG); isc_result_t (*getnsec3parameters)(dns_db_t *db, @@ -1422,16 +1421,6 @@ dns_db_hashsize(dns_db_t *db); * 0 if not implemented. */ -void -dns_db_setloop(dns_db_t *db, isc_loop_t *loop); -/*%< - * If loop is set then the final detach may be performed asynchronously. - * - * Requires: - * \li 'db' is a valid database. - * \li 'loop' to be valid or NULL. - */ - bool dns_db_ispersistent(dns_db_t *db); /*%< diff --git a/lib/dns/qpzone.c b/lib/dns/qpzone.c index 5f5de351b2..0f393dccf4 100644 --- a/lib/dns/qpzone.c +++ b/lib/dns/qpzone.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -238,7 +237,6 @@ struct qpzonedb { qpz_version_t *current_version; qpz_version_t *future_version; qpz_versionlist_t open_versions; - isc_loop_t *loop; struct rcu_head rcu_head; qpz_heap_t *heap; /* Resigning heap */ @@ -517,10 +515,6 @@ free_db_rcu(struct rcu_head *rcu_head) { isc_stats_detach(&qpdb->gluecachestats); } - if (qpdb->loop != NULL) { - isc_loop_detach(&qpdb->loop); - } - isc_rwlock_destroy(&qpdb->lock); isc_refcount_destroy(&qpdb->common.references); @@ -3872,24 +3866,6 @@ nodecount(dns_db_t *db, dns_dbtree_t tree ISC_ATTR_UNUSED) { return mu.leaves; } -static void -setloop(dns_db_t *db, isc_loop_t *loop) { - qpzonedb_t *qpdb = NULL; - - qpdb = (qpzonedb_t *)db; - - REQUIRE(VALID_QPZONE(qpdb)); - - RWLOCK(&qpdb->lock, isc_rwlocktype_write); - if (qpdb->loop != NULL) { - isc_loop_detach(&qpdb->loop); - } - if (loop != NULL) { - isc_loop_attach(loop, &qpdb->loop); - } - RWUNLOCK(&qpdb->lock, isc_rwlocktype_write); -} - static isc_result_t getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) { qpzonedb_t *qpdb = (qpzonedb_t *)db; @@ -5308,7 +5284,6 @@ static dns_dbmethods_t qpdb_zonemethods = { .deleterdataset = qpzone_deleterdataset, .issecure = issecure, .nodecount = nodecount, - .setloop = setloop, .getoriginnode = getoriginnode, .getnsec3parameters = getnsec3parameters, .findnsec3node = qpzone_findnsec3node, diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c index 7e2064dc98..598ba42e96 100644 --- a/lib/dns/sdlz.c +++ b/lib/dns/sdlz.c @@ -1122,12 +1122,6 @@ nodecount(dns_db_t *db, dns_dbtree_t tree) { return 0; } -static void -setloop(dns_db_t *db, isc_loop_t *loop) { - UNUSED(db); - UNUSED(loop); -} - /* * getoriginnode() is used by the update code to find the * dns_rdatatype_dnskey record for a zone @@ -1167,7 +1161,6 @@ static dns_dbmethods_t sdlzdb_methods = { .deleterdataset = deleterdataset, .issecure = issecure, .nodecount = nodecount, - .setloop = setloop, .getoriginnode = getoriginnode, .findnodeext = findnodeext, .findext = findext, diff --git a/lib/dns/zone.c b/lib/dns/zone.c index dd16e4ce6e..e12ecae892 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -15128,7 +15128,6 @@ ns_query(dns_zone_t *zone, dns_rdataset_t *soardataset, dns_stub_t *stub) { isc_result_totext(result)); goto cleanup; } - dns_db_setloop(stub->db, zone->loop); dns_db_setmaxrrperset(stub->db, zone->maxrrperset); dns_db_setmaxtypepername(stub->db, zone->maxtypepername); @@ -18172,7 +18171,6 @@ zone_replacedb(dns_zone_t *zone, dns_db_t *db, bool dump) { zone_detachdb(zone); } zone_attachdb(zone, db); - dns_db_setloop(zone->db, zone->loop); dns_db_setmaxrrperset(zone->db, zone->maxrrperset); dns_db_setmaxtypepername(zone->db, zone->maxtypepername); DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADED | DNS_ZONEFLG_NEEDNOTIFY); @@ -24800,7 +24798,6 @@ dns_zone_makedb(dns_zone_t *zone, dns_db_t **dbp) { break; } - dns_db_setloop(db, zone->loop); dns_db_setmaxrrperset(db, zone->maxrrperset); dns_db_setmaxtypepername(db, zone->maxtypepername); From 0222c385aae92a2f115b61f0b071d1768ded73cf Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Mon, 4 Aug 2025 16:06:23 -0700 Subject: [PATCH 2/9] dns_rdatalist functions are not for general use the rdataset method implementation functions in dns/rdatalist.c (i.e., dns_rdatalist_first, _next, etc) are not meant to be called directly; they're called via dns_rdataset_first(), dns_rdataset_next(), etc. in dnssec-ksr.c, a list-based rdataset was iterated using these functions. this has been fixed, and the functions have been renamed to use the `dns__` prefix as a signal that they aren't meant to be used outside the rdataset implementation. --- bin/dnssec/dnssec-ksr.c | 12 +++----- bin/named/builtin.c | 14 ++++----- lib/dns/include/dns/rdatalist.h | 49 ++++++++++++++---------------- lib/dns/rdatalist.c | 54 ++++++++++++++++----------------- lib/dns/sdlz.c | 14 ++++----- 5 files changed, 67 insertions(+), 76 deletions(-) diff --git a/bin/dnssec/dnssec-ksr.c b/bin/dnssec/dnssec-ksr.c index e891c0a910..787ffe4ff3 100644 --- a/bin/dnssec/dnssec-ksr.c +++ b/bin/dnssec/dnssec-ksr.c @@ -913,23 +913,19 @@ sign_bundle(ksr_ctx_t *ksr, dns_kasp_t *kasp, isc_stdtime_t inception, next_bundle = next_time; } - for (isc_result_t r = dns_rdatalist_first(&ksk); - r == ISC_R_SUCCESS; r = dns_rdatalist_next(&ksk)) - { + DNS_RDATASET_FOREACH(&ksk) { dns_rdata_t *clone = isc_mem_get(isc_g_mctx, sizeof(*clone)); dns_rdata_init(clone); - dns_rdatalist_current(&ksk, clone); + dns_rdataset_current(&ksk, clone); ISC_LIST_APPEND(dnskeylist->rdata, clone, link); } - for (isc_result_t r = dns_rdatalist_first(&zsk); - r == ISC_R_SUCCESS; r = dns_rdatalist_next(&zsk)) - { + DNS_RDATASET_FOREACH(&zsk) { dns_rdata_t *clone = isc_mem_get(isc_g_mctx, sizeof(*clone)); dns_rdata_init(clone); - dns_rdatalist_current(&zsk, clone); + dns_rdataset_current(&zsk, clone); ISC_LIST_APPEND(dnskeylist->rdata, clone, link); } diff --git a/bin/named/builtin.c b/bin/named/builtin.c index f03cf3a8d9..8043e4f9c5 100644 --- a/bin/named/builtin.c +++ b/bin/named/builtin.c @@ -631,19 +631,19 @@ static void rdataset_clone(dns_rdataset_t *source, dns_rdataset_t *target DNS__DB_FLARG) { dns_dbnode_t *node = source->rdlist.node; - dns_rdatalist_clone(source, target DNS__DB_FLARG_PASS); + dns__rdatalist_clone(source, target DNS__DB_FLARG_PASS); bdbnode_attachnode(node, &target->rdlist.node DNS__DB_FLARG_PASS); } static dns_rdatasetmethods_t bdb_rdataset_methods = { .disassociate = disassociate, - .first = dns_rdatalist_first, - .next = dns_rdatalist_next, - .current = dns_rdatalist_current, + .first = dns__rdatalist_first, + .next = dns__rdatalist_next, + .current = dns__rdatalist_current, .clone = rdataset_clone, - .count = dns_rdatalist_count, - .addnoqname = dns_rdatalist_addnoqname, - .getnoqname = dns_rdatalist_getnoqname, + .count = dns__rdatalist_count, + .addnoqname = dns__rdatalist_addnoqname, + .getnoqname = dns__rdatalist_getnoqname, }; static void diff --git a/lib/dns/include/dns/rdatalist.h b/lib/dns/include/dns/rdatalist.h index e71a089fd1..35e490de38 100644 --- a/lib/dns/include/dns/rdatalist.h +++ b/lib/dns/include/dns/rdatalist.h @@ -107,43 +107,38 @@ dns_rdatalist_fromrdataset(dns_rdataset_t *rdataset, *\li 'rdatalist' is pointed to the rdatalist in rdataset. */ +/*% + * The following are implementation functions for list-based rdatasets. + * They are called by rdataset implementations in rdatalist.c, sdlz.c, + * and builtin.c. They are not meant to be used directly by callers of + * those implmentations. + */ void dns_rdatalist_disassociate(dns_rdataset_t *rdatasetp DNS__DB_FLARG); - isc_result_t -dns_rdatalist_first(dns_rdataset_t *rdataset); - +dns__rdatalist_first(dns_rdataset_t *rdataset); isc_result_t -dns_rdatalist_next(dns_rdataset_t *rdataset); - +dns__rdatalist_next(dns_rdataset_t *rdataset); void -dns_rdatalist_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata); - +dns__rdatalist_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata); void -dns_rdatalist_clone(dns_rdataset_t *source, - dns_rdataset_t *target DNS__DB_FLARG); - +dns__rdatalist_clone(dns_rdataset_t *source, + dns_rdataset_t *target DNS__DB_FLARG); unsigned int -dns_rdatalist_count(dns_rdataset_t *rdataset); - +dns__rdatalist_count(dns_rdataset_t *rdataset); isc_result_t -dns_rdatalist_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name); - +dns__rdatalist_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name); isc_result_t -dns_rdatalist_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name, - dns_rdataset_t *neg, - dns_rdataset_t *negsig DNS__DB_FLARG); - +dns__rdatalist_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name, + dns_rdataset_t *neg, + dns_rdataset_t *negsig DNS__DB_FLARG); isc_result_t -dns_rdatalist_addclosest(dns_rdataset_t *rdataset, dns_name_t *name); - +dns__rdatalist_addclosest(dns_rdataset_t *rdataset, dns_name_t *name); isc_result_t -dns_rdatalist_getclosest(dns_rdataset_t *rdataset, dns_name_t *name, - dns_rdataset_t *neg, - dns_rdataset_t *negsig DNS__DB_FLARG); - +dns__rdatalist_getclosest(dns_rdataset_t *rdataset, dns_name_t *name, + dns_rdataset_t *neg, + dns_rdataset_t *negsig DNS__DB_FLARG); void -dns_rdatalist_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name); - +dns__rdatalist_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name); void -dns_rdatalist_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name); +dns__rdatalist_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name); diff --git a/lib/dns/rdatalist.c b/lib/dns/rdatalist.c index eced445df4..d5b650679e 100644 --- a/lib/dns/rdatalist.c +++ b/lib/dns/rdatalist.c @@ -26,17 +26,17 @@ static dns_rdatasetmethods_t methods = { .disassociate = dns_rdatalist_disassociate, - .first = dns_rdatalist_first, - .next = dns_rdatalist_next, - .current = dns_rdatalist_current, - .clone = dns_rdatalist_clone, - .count = dns_rdatalist_count, - .addnoqname = dns_rdatalist_addnoqname, - .getnoqname = dns_rdatalist_getnoqname, - .addclosest = dns_rdatalist_addclosest, - .getclosest = dns_rdatalist_getclosest, - .setownercase = dns_rdatalist_setownercase, - .getownercase = dns_rdatalist_getownercase, + .first = dns__rdatalist_first, + .next = dns__rdatalist_next, + .current = dns__rdatalist_current, + .clone = dns__rdatalist_clone, + .count = dns__rdatalist_count, + .addnoqname = dns__rdatalist_addnoqname, + .getnoqname = dns__rdatalist_getnoqname, + .addclosest = dns__rdatalist_addclosest, + .getclosest = dns__rdatalist_getclosest, + .setownercase = dns__rdatalist_setownercase, + .getownercase = dns__rdatalist_getownercase, }; void @@ -100,7 +100,7 @@ dns_rdatalist_disassociate(dns_rdataset_t *rdataset DNS__DB_FLARG) { } isc_result_t -dns_rdatalist_first(dns_rdataset_t *rdataset) { +dns__rdatalist_first(dns_rdataset_t *rdataset) { dns_rdatalist_t *rdatalist = NULL; rdatalist = rdataset->rdlist.list; @@ -114,7 +114,7 @@ dns_rdatalist_first(dns_rdataset_t *rdataset) { } isc_result_t -dns_rdatalist_next(dns_rdataset_t *rdataset) { +dns__rdatalist_next(dns_rdataset_t *rdataset) { dns_rdata_t *rdata; rdata = rdataset->rdlist.iter; @@ -132,7 +132,7 @@ dns_rdatalist_next(dns_rdataset_t *rdataset) { } void -dns_rdatalist_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata) { +dns__rdatalist_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata) { dns_rdata_t *list_rdata; list_rdata = rdataset->rdlist.iter; @@ -142,8 +142,8 @@ dns_rdatalist_current(dns_rdataset_t *rdataset, dns_rdata_t *rdata) { } void -dns_rdatalist_clone(dns_rdataset_t *source, - dns_rdataset_t *target DNS__DB_FLARG) { +dns__rdatalist_clone(dns_rdataset_t *source, + dns_rdataset_t *target DNS__DB_FLARG) { REQUIRE(source != NULL); REQUIRE(target != NULL); @@ -153,7 +153,7 @@ dns_rdatalist_clone(dns_rdataset_t *source, } unsigned int -dns_rdatalist_count(dns_rdataset_t *rdataset) { +dns__rdatalist_count(dns_rdataset_t *rdataset) { dns_rdatalist_t *rdatalist = NULL; unsigned int count; @@ -170,7 +170,7 @@ dns_rdatalist_count(dns_rdataset_t *rdataset) { } isc_result_t -dns_rdatalist_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name) { +dns__rdatalist_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name) { dns_rdataset_t *neg = NULL; dns_rdataset_t *negsig = NULL; dns_ttl_t ttl; @@ -218,9 +218,9 @@ dns_rdatalist_addnoqname(dns_rdataset_t *rdataset, dns_name_t *name) { } isc_result_t -dns_rdatalist_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name, - dns_rdataset_t *neg, - dns_rdataset_t *negsig DNS__DB_FLARG) { +dns__rdatalist_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name, + dns_rdataset_t *neg, + dns_rdataset_t *negsig DNS__DB_FLARG) { dns_rdataclass_t rdclass; dns_rdataset_t *tneg = NULL; dns_rdataset_t *tnegsig = NULL; @@ -264,7 +264,7 @@ dns_rdatalist_getnoqname(dns_rdataset_t *rdataset, dns_name_t *name, } isc_result_t -dns_rdatalist_addclosest(dns_rdataset_t *rdataset, dns_name_t *name) { +dns__rdatalist_addclosest(dns_rdataset_t *rdataset, dns_name_t *name) { dns_rdataset_t *neg = NULL; dns_rdataset_t *negsig = NULL; dns_ttl_t ttl; @@ -311,9 +311,9 @@ dns_rdatalist_addclosest(dns_rdataset_t *rdataset, dns_name_t *name) { } isc_result_t -dns_rdatalist_getclosest(dns_rdataset_t *rdataset, dns_name_t *name, - dns_rdataset_t *neg, - dns_rdataset_t *negsig DNS__DB_FLARG) { +dns__rdatalist_getclosest(dns_rdataset_t *rdataset, dns_name_t *name, + dns_rdataset_t *neg, + dns_rdataset_t *negsig DNS__DB_FLARG) { dns_rdataclass_t rdclass; dns_rdataset_t *tneg = NULL; dns_rdataset_t *tnegsig = NULL; @@ -357,7 +357,7 @@ dns_rdatalist_getclosest(dns_rdataset_t *rdataset, dns_name_t *name, } void -dns_rdatalist_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name) { +dns__rdatalist_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name) { dns_rdatalist_t *rdatalist; unsigned int i; @@ -379,7 +379,7 @@ dns_rdatalist_setownercase(dns_rdataset_t *rdataset, const dns_name_t *name) { } void -dns_rdatalist_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name) { +dns__rdatalist_getownercase(const dns_rdataset_t *rdataset, dns_name_t *name) { dns_rdatalist_t *rdatalist; unsigned int i; diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c index 598ba42e96..c68e2e3764 100644 --- a/lib/dns/sdlz.c +++ b/lib/dns/sdlz.c @@ -1296,19 +1296,19 @@ static void rdataset_clone(dns_rdataset_t *source, dns_rdataset_t *target DNS__DB_FLARG) { dns_dbnode_t *node = source->rdlist.node; - dns_rdatalist_clone(source, target DNS__DB_FLARG_PASS); + dns__rdatalist_clone(source, target DNS__DB_FLARG_PASS); sdlznode_attachnode(node, &target->rdlist.node DNS__DB_FLARG_PASS); } static dns_rdatasetmethods_t rdataset_methods = { .disassociate = disassociate, - .first = dns_rdatalist_first, - .next = dns_rdatalist_next, - .current = dns_rdatalist_current, + .first = dns__rdatalist_first, + .next = dns__rdatalist_next, + .current = dns__rdatalist_current, .clone = rdataset_clone, - .count = dns_rdatalist_count, - .addnoqname = dns_rdatalist_addnoqname, - .getnoqname = dns_rdatalist_getnoqname, + .count = dns__rdatalist_count, + .addnoqname = dns__rdatalist_addnoqname, + .getnoqname = dns__rdatalist_getnoqname, }; static void From 9e14fcd2592d741e63c82fbffc5e5964603a8241 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Mon, 4 Aug 2025 16:24:09 -0700 Subject: [PATCH 3/9] remove obsolete dns_db_hashsize() this function's purpose was to populate the "CacheBuckets" statistic, but there are no databases left that implemented it, so the return value was always 0. "CacheBuckets" has now been removed from the statistics, and the dns_db_hashsize() API call has been removed. --- lib/dns/cache.c | 7 ------- lib/dns/db.c | 11 ----------- lib/dns/include/dns/db.h | 1 - 3 files changed, 19 deletions(-) diff --git a/lib/dns/cache.c b/lib/dns/cache.c index 83a8e494a9..69267ea4d4 100644 --- a/lib/dns/cache.c +++ b/lib/dns/cache.c @@ -622,8 +622,6 @@ dns_cache_dumpstats(dns_cache_t *cache, FILE *fp) { "cache database nodes"); fprintf(fp, "%20u %s\n", dns_db_nodecount(cache->db, dns_dbtree_nsec), "cache NSEC auxiliary database nodes"); - fprintf(fp, "%20" PRIu64 " %s\n", (uint64_t)dns_db_hashsize(cache->db), - "cache database hash buckets"); fprintf(fp, "%20" PRIu64 " %s\n", (uint64_t)isc_mem_inuse(cache->tmctx), "cache tree memory in use"); @@ -683,7 +681,6 @@ dns_cache_renderxml(dns_cache_t *cache, void *writer0) { dns_db_nodecount(cache->db, dns_dbtree_main), writer)); TRY0(renderstat("CacheNSECNodes", dns_db_nodecount(cache->db, dns_dbtree_nsec), writer)); - TRY0(renderstat("CacheBuckets", dns_db_hashsize(cache->db), writer)); TRY0(renderstat("TreeMemInUse", isc_mem_inuse(cache->tmctx), writer)); @@ -753,10 +750,6 @@ dns_cache_renderjson(dns_cache_t *cache, void *cstats0) { CHECKMEM(obj); json_object_object_add(cstats, "CacheNSECNodes", obj); - obj = json_object_new_int64(dns_db_hashsize(cache->db)); - CHECKMEM(obj); - json_object_object_add(cstats, "CacheBuckets", obj); - obj = json_object_new_int64(isc_mem_inuse(cache->tmctx)); CHECKMEM(obj); json_object_object_add(cstats, "TreeMemInUse", obj); diff --git a/lib/dns/db.c b/lib/dns/db.c index c9f3363a34..6ffcdca7d4 100644 --- a/lib/dns/db.c +++ b/lib/dns/db.c @@ -800,17 +800,6 @@ dns_db_nodecount(dns_db_t *db, dns_dbtree_t tree) { return 0; } -size_t -dns_db_hashsize(dns_db_t *db) { - REQUIRE(DNS_DB_VALID(db)); - - if (db->methods->hashsize == NULL) { - return 0; - } - - return (db->methods->hashsize)(db); -} - isc_result_t dns_db_register(const char *name, dns_dbcreatefunc_t create, void *driverarg, isc_mem_t *mctx, dns_dbimplementation_t **dbimp) { diff --git a/lib/dns/include/dns/db.h b/lib/dns/include/dns/db.h index 6b6f742753..91a43e2c13 100644 --- a/lib/dns/include/dns/db.h +++ b/lib/dns/include/dns/db.h @@ -173,7 +173,6 @@ typedef struct dns_db_methods { dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG); isc_result_t (*setcachestats)(dns_db_t *db, isc_stats_t *stats); - size_t (*hashsize)(dns_db_t *db); isc_result_t (*getsize)(dns_db_t *db, dns_dbversion_t *version, uint64_t *records, uint64_t *bytes); isc_result_t (*setservestalettl)(dns_db_t *db, dns_ttl_t ttl); From 4de396f955cbce45564b1f5ff9db4e8801738071 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Mon, 4 Aug 2025 16:54:08 -0700 Subject: [PATCH 4/9] merge dns_db_find/findext and dns_db_findnode/findnodeext the dns_db_findext and _findnodeext calls are extended versions of dns_db_find and _findnode, which take additional arguments for client information in order to support ECS. previously, database implementations could support either API call, with cross-compatibility so that, for example, dns_db_findext() could call a find implementation if findext was not implemented, and dns_db_find() could call findext if find was not implemented. this has now been simplified. the find and findnodeext implementations now support client info. all database implementations will now provide these calls. implementations which do not support ECS will simply ignore the clientinfo and clientinfomethods parameters. this only affects the underlying implementation; callers will still use the same interface. dns_db_find() and dns_db_findnode() are now macros which pass NULL to the clientinfo parameters, so that callers don't have to do so explicitly. dns_db_findext() and dns_db_findnodeext() are still available for callers that do wish to pass clientinfo pointers. --- bin/named/builtin.c | 9 +++- bin/tests/system/dyndb/driver/db.c | 57 ++++++---------------- lib/dns/db.c | 77 ++++-------------------------- lib/dns/include/dns/db.h | 70 ++++++++++----------------- lib/dns/qpcache.c | 4 ++ lib/dns/qpzone.c | 11 +++-- lib/dns/sdlz.c | 31 +++--------- 7 files changed, 75 insertions(+), 184 deletions(-) diff --git a/bin/named/builtin.c b/bin/named/builtin.c index 8043e4f9c5..a9049b536f 100644 --- a/bin/named/builtin.c +++ b/bin/named/builtin.c @@ -859,6 +859,8 @@ getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) { static isc_result_t findnode(dns_db_t *db, const dns_name_t *name, bool create, + dns_clientinfomethods_t *methods ISC_ATTR_UNUSED, + dns_clientinfo_t *clientinfo ISC_ATTR_UNUSED, dns_dbnode_t **nodep DNS__DB_FLARG) { bdb_t *bdb = (bdb_t *)db; bdbnode_t *node = NULL; @@ -906,7 +908,9 @@ findnode(dns_db_t *db, const dns_name_t *name, bool create, static isc_result_t find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, - dns_dbnode_t **nodep, dns_name_t *foundname, dns_rdataset_t *rdataset, + dns_dbnode_t **nodep, dns_name_t *foundname, + dns_clientinfomethods_t *methods ISC_ATTR_UNUSED, + dns_clientinfo_t *clientinfo ISC_ATTR_UNUSED, dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG) { bdb_t *bdb = (bdb_t *)db; isc_result_t result; @@ -942,7 +946,8 @@ find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, * Look up the next label. */ dns_name_getlabelsequence(name, nlabels - i, i, xname); - result = findnode(db, xname, false, &node DNS__DB_FLARG_PASS); + result = findnode(db, xname, false, NULL, NULL, + &node DNS__DB_FLARG_PASS); if (result == ISC_R_NOTFOUND) { /* * No data at zone apex? diff --git a/bin/tests/system/dyndb/driver/db.c b/bin/tests/system/dyndb/driver/db.c index 77534d9878..f11f6930e4 100644 --- a/bin/tests/system/dyndb/driver/db.c +++ b/bin/tests/system/dyndb/driver/db.c @@ -125,31 +125,6 @@ closeversion(dns_db_t *db, dns_dbversion_t **versionp, dns__db_closeversion(sampledb->db, versionp, commit DNS__DB_FLARG_PASS); } -static isc_result_t -findnode(dns_db_t *db, const dns_name_t *name, bool create, - dns_dbnode_t **nodep DNS__DB_FLARG) { - sampledb_t *sampledb = (sampledb_t *)db; - - REQUIRE(VALID_SAMPLEDB(sampledb)); - - return dns__db_findnode(sampledb->db, name, create, - nodep DNS__DB_FLARG_PASS); -} - -static isc_result_t -find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, - dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, - dns_dbnode_t **nodep, dns_name_t *foundname, dns_rdataset_t *rdataset, - dns_rdataset_t *sigrdataset DNS__DB_FLARG) { - sampledb_t *sampledb = (sampledb_t *)db; - - REQUIRE(VALID_SAMPLEDB(sampledb)); - - return dns__db_find(sampledb->db, name, version, type, options, now, - nodep, foundname, rdataset, - sigrdataset DNS__DB_FLARG_PASS); -} - static isc_result_t findzonecut(dns_db_t *db, const dns_name_t *name, unsigned int options, isc_stdtime_t now, dns_dbnode_t **nodep, dns_name_t *foundname, @@ -345,30 +320,30 @@ getrrsetstats(dns_db_t *db) { } static isc_result_t -findnodeext(dns_db_t *db, const dns_name_t *name, bool create, - dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, - dns_dbnode_t **nodep DNS__DB_FLARG) { +findnode(dns_db_t *db, const dns_name_t *name, bool create, + dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, + dns_dbnode_t **nodep DNS__DB_FLARG) { sampledb_t *sampledb = (sampledb_t *)db; REQUIRE(VALID_SAMPLEDB(sampledb)); - return dns__db_findnodeext(sampledb->db, name, create, methods, - clientinfo, nodep DNS__DB_FLARG_PASS); + return dns__db_findnode(sampledb->db, name, create, methods, clientinfo, + nodep DNS__DB_FLARG_PASS); } static isc_result_t -findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, - dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, - dns_dbnode_t **nodep, dns_name_t *foundname, - dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, - dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG) { +find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, + dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, + dns_dbnode_t **nodep, dns_name_t *foundname, + dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, + dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG) { sampledb_t *sampledb = (sampledb_t *)db; REQUIRE(VALID_SAMPLEDB(sampledb)); - return dns__db_findext(sampledb->db, name, version, type, options, now, - nodep, foundname, methods, clientinfo, rdataset, - sigrdataset DNS__DB_FLARG_PASS); + return dns__db_find(sampledb->db, name, version, type, options, now, + nodep, foundname, methods, clientinfo, rdataset, + sigrdataset DNS__DB_FLARG_PASS); } static isc_result_t @@ -390,8 +365,6 @@ static dns_dbmethods_t sampledb_methods = { .newversion = newversion, .attachversion = attachversion, .closeversion = closeversion, - .findnode = findnode, - .find = find, .findzonecut = findzonecut, .createiterator = createiterator, .findrdataset = findrdataset, @@ -407,8 +380,8 @@ static dns_dbmethods_t sampledb_methods = { .setsigningtime = setsigningtime, .getsigningtime = getsigningtime, .getrrsetstats = getrrsetstats, - .findnodeext = findnodeext, - .findext = findext, + .findnode = findnode, + .find = find, .setcachestats = setcachestats, }; diff --git a/lib/dns/db.c b/lib/dns/db.c index 6ffcdca7d4..bb47ce386d 100644 --- a/lib/dns/db.c +++ b/lib/dns/db.c @@ -415,28 +415,8 @@ dns__db_closeversion(dns_db_t *db, dns_dbversion_t **versionp, isc_result_t dns__db_findnode(dns_db_t *db, const dns_name_t *name, bool create, + dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, dns_dbnode_t **nodep DNS__DB_FLARG) { - /* - * Find the node with name 'name'. - */ - - REQUIRE(DNS_DB_VALID(db)); - REQUIRE(nodep != NULL && *nodep == NULL); - - if (db->methods->findnode != NULL) { - return (db->methods->findnode)(db, name, create, - nodep DNS__DB_FLARG_PASS); - } else { - return (db->methods->findnodeext)(db, name, create, NULL, NULL, - nodep DNS__DB_FLARG_PASS); - } -} - -isc_result_t -dns__db_findnodeext(dns_db_t *db, const dns_name_t *name, bool create, - dns_clientinfomethods_t *methods, - dns_clientinfo_t *clientinfo, - dns_dbnode_t **nodep DNS__DB_FLARG) { /* * Find the node with name 'name', passing 'arg' to the database * implementation. @@ -445,14 +425,12 @@ dns__db_findnodeext(dns_db_t *db, const dns_name_t *name, bool create, REQUIRE(DNS_DB_VALID(db)); REQUIRE(nodep != NULL && *nodep == NULL); - if (db->methods->findnodeext != NULL) { - return (db->methods->findnodeext)(db, name, create, methods, - clientinfo, - nodep DNS__DB_FLARG_PASS); - } else { - return (db->methods->findnode)(db, name, create, + if (db->methods->findnode != NULL) { + return (db->methods->findnode)(db, name, create, methods, + clientinfo, nodep DNS__DB_FLARG_PASS); } + return ISC_R_NOTIMPLEMENTED; } isc_result_t @@ -473,41 +451,9 @@ isc_result_t dns__db_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, dns_dbnode_t **nodep, dns_name_t *foundname, + dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG) { - /* - * Find the best match for 'name' and 'type' in version 'version' - * of 'db'. - */ - - REQUIRE(DNS_DB_VALID(db)); - REQUIRE(type != dns_rdatatype_rrsig); - REQUIRE(nodep == NULL || *nodep == NULL); - REQUIRE(dns_name_hasbuffer(foundname)); - REQUIRE(rdataset == NULL || (DNS_RDATASET_VALID(rdataset) && - !dns_rdataset_isassociated(rdataset))); - REQUIRE(sigrdataset == NULL || - (DNS_RDATASET_VALID(sigrdataset) && - !dns_rdataset_isassociated(sigrdataset))); - - if (db->methods->find != NULL) { - return (db->methods->find)(db, name, version, type, options, - now, nodep, foundname, rdataset, - sigrdataset DNS__DB_FLARG_PASS); - } else { - return (db->methods->findext)( - db, name, version, type, options, now, nodep, foundname, - NULL, NULL, rdataset, sigrdataset DNS__DB_FLARG_PASS); - } -} - -isc_result_t -dns__db_findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, - dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, - dns_dbnode_t **nodep, dns_name_t *foundname, - dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, - dns_rdataset_t *rdataset, - dns_rdataset_t *sigrdataset DNS__DB_FLARG) { /* * Find the best match for 'name' and 'type' in version 'version' * of 'db', passing in 'arg'. @@ -523,16 +469,13 @@ dns__db_findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, (DNS_RDATASET_VALID(sigrdataset) && !dns_rdataset_isassociated(sigrdataset))); - if (db->methods->findext != NULL) { - return (db->methods->findext)(db, name, version, type, options, - now, nodep, foundname, methods, - clientinfo, rdataset, - sigrdataset DNS__DB_FLARG_PASS); - } else { + if (db->methods->find != NULL) { return (db->methods->find)(db, name, version, type, options, - now, nodep, foundname, rdataset, + now, nodep, foundname, methods, + clientinfo, rdataset, sigrdataset DNS__DB_FLARG_PASS); } + return ISC_R_NOTIMPLEMENTED; } isc_result_t diff --git a/lib/dns/include/dns/db.h b/lib/dns/include/dns/db.h index 91a43e2c13..6ce4daa6c5 100644 --- a/lib/dns/include/dns/db.h +++ b/lib/dns/include/dns/db.h @@ -100,15 +100,6 @@ typedef struct dns_db_methods { dns_dbversion_t **targetp); void (*closeversion)(dns_db_t *db, dns_dbversion_t **versionp, bool commit DNS__DB_FLARG); - isc_result_t (*findnode)(dns_db_t *db, const dns_name_t *name, - bool create, - dns_dbnode_t **nodep DNS__DB_FLARG); - isc_result_t (*find)(dns_db_t *db, const dns_name_t *name, - dns_dbversion_t *version, dns_rdatatype_t type, - unsigned int options, isc_stdtime_t now, - dns_dbnode_t **nodep, dns_name_t *foundname, - dns_rdataset_t *rdataset, - dns_rdataset_t *sigrdataset DNS__DB_FLARG); isc_result_t (*findzonecut)(dns_db_t *db, const dns_name_t *name, unsigned int options, isc_stdtime_t now, dns_dbnode_t **nodep, dns_name_t *foundname, @@ -159,19 +150,18 @@ typedef struct dns_db_methods { dns_name_t *name, dns_typepair_t *typepair); dns_stats_t *(*getrrsetstats)(dns_db_t *db); - isc_result_t (*findnodeext)(dns_db_t *db, const dns_name_t *name, - bool create, - dns_clientinfomethods_t *methods, - dns_clientinfo_t *clientinfo, - dns_dbnode_t **nodep DNS__DB_FLARG); - isc_result_t (*findext)(dns_db_t *db, const dns_name_t *name, - dns_dbversion_t *version, dns_rdatatype_t type, - unsigned int options, isc_stdtime_t now, - dns_dbnode_t **nodep, dns_name_t *foundname, - dns_clientinfomethods_t *methods, - dns_clientinfo_t *clientinfo, - dns_rdataset_t *rdataset, - dns_rdataset_t *sigrdataset DNS__DB_FLARG); + isc_result_t (*findnode)(dns_db_t *db, const dns_name_t *name, + bool create, dns_clientinfomethods_t *methods, + dns_clientinfo_t *clientinfo, + dns_dbnode_t **nodep DNS__DB_FLARG); + isc_result_t (*find)(dns_db_t *db, const dns_name_t *name, + dns_dbversion_t *version, dns_rdatatype_t type, + unsigned int options, isc_stdtime_t now, + dns_dbnode_t **nodep, dns_name_t *foundname, + dns_clientinfomethods_t *methods, + dns_clientinfo_t *clientinfo, + dns_rdataset_t *rdataset, + dns_rdataset_t *sigrdataset DNS__DB_FLARG); isc_result_t (*setcachestats)(dns_db_t *db, isc_stats_t *stats); isc_result_t (*getsize)(dns_db_t *db, dns_dbversion_t *version, uint64_t *records, uint64_t *bytes); @@ -694,19 +684,14 @@ dns__db_closeversion(dns_db_t *db, dns_dbversion_t **versionp, ***/ #define dns_db_findnode(db, name, create, nodep) \ - dns__db_findnode(db, name, create, nodep DNS__DB_FILELINE) + dns__db_findnode(db, name, create, NULL, NULL, nodep DNS__DB_FILELINE) +#define dns_db_findnodeext(db, name, create, methods, clientinfo, nodep) \ + dns__db_findnode(db, name, create, methods, clientinfo, \ + nodep DNS__DB_FILELINE) isc_result_t dns__db_findnode(dns_db_t *db, const dns_name_t *name, bool create, + dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, dns_dbnode_t **nodep DNS__DB_FLARG); - -#define dns_db_findnodeext(db, name, create, methods, clientinfo, nodep) \ - dns__db_findnodeext(db, name, create, methods, clientinfo, \ - nodep DNS__DB_FILELINE) -isc_result_t -dns__db_findnodeext(dns_db_t *db, const dns_name_t *name, bool create, - dns_clientinfomethods_t *methods, - dns_clientinfo_t *clientinfo, - dns_dbnode_t **nodep DNS__DB_FLARG); /*%< * Find the node with name 'name'. * @@ -748,26 +733,19 @@ dns__db_findnodeext(dns_db_t *db, const dns_name_t *name, bool create, #define dns_db_find(db, name, version, type, options, now, nodep, foundname, \ rdataset, sigrdataset) \ dns__db_find(db, name, version, type, options, now, nodep, foundname, \ - rdataset, sigrdataset DNS__DB_FILELINE) + NULL, NULL, rdataset, sigrdataset DNS__DB_FILELINE) +#define dns_db_findext(db, name, version, type, options, now, nodep, \ + foundname, methods, clientinfo, rdataset, sigrdataset) \ + dns__db_find(db, name, version, type, options, now, nodep, foundname, \ + methods, clientinfo, rdataset, \ + sigrdataset DNS__DB_FILELINE) isc_result_t dns__db_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, dns_dbnode_t **nodep, dns_name_t *foundname, + dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG); - -#define dns_db_findext(db, name, version, type, options, now, nodep, \ - foundname, methods, clientinfo, rdataset, sigrdataset) \ - dns__db_findext(db, name, version, type, options, now, nodep, \ - foundname, methods, clientinfo, rdataset, \ - sigrdataset DNS__DB_FILELINE) -isc_result_t -dns__db_findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, - dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, - dns_dbnode_t **nodep, dns_name_t *foundname, - dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, - dns_rdataset_t *rdataset, - dns_rdataset_t *sigrdataset DNS__DB_FLARG); /*%< * Find the best match for 'name' and 'type' in version 'version' of 'db'. * diff --git a/lib/dns/qpcache.c b/lib/dns/qpcache.c index 13bc5ecb27..5d60c092d8 100644 --- a/lib/dns/qpcache.c +++ b/lib/dns/qpcache.c @@ -1542,6 +1542,8 @@ static isc_result_t qpcache_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, dns_rdatatype_t type, unsigned int options, isc_stdtime_t __now, dns_dbnode_t **nodep, dns_name_t *foundname, + dns_clientinfomethods_t *methods ISC_ATTR_UNUSED, + dns_clientinfo_t *clientinfo ISC_ATTR_UNUSED, dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG) { qpcnode_t *node = NULL; @@ -2420,6 +2422,8 @@ new_qpcnode(qpcache_t *qpdb, const dns_name_t *name, dns_namespace_t nspace) { static isc_result_t qpcache_findnode(dns_db_t *db, const dns_name_t *name, bool create, + dns_clientinfomethods_t *methods ISC_ATTR_UNUSED, + dns_clientinfo_t *clientinfo ISC_ATTR_UNUSED, dns_dbnode_t **nodep DNS__DB_FLARG) { qpcache_t *qpdb = (qpcache_t *)db; qpcnode_t *node = NULL; diff --git a/lib/dns/qpzone.c b/lib/dns/qpzone.c index 0f393dccf4..4642d04bee 100644 --- a/lib/dns/qpzone.c +++ b/lib/dns/qpzone.c @@ -2505,6 +2505,8 @@ findnodeintree(qpzonedb_t *qpdb, const dns_name_t *name, bool create, static isc_result_t qpzone_findnode(dns_db_t *db, const dns_name_t *name, bool create, + dns_clientinfomethods_t *methods ISC_ATTR_UNUSED, + dns_clientinfo_t *clientinfo ISC_ATTR_UNUSED, dns_dbnode_t **nodep DNS__DB_FLARG) { qpzonedb_t *qpdb = (qpzonedb_t *)db; @@ -3269,7 +3271,10 @@ static isc_result_t qpzone_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, dns_rdatatype_t type, unsigned int options, isc_stdtime_t now ISC_ATTR_UNUSED, dns_dbnode_t **nodep, - dns_name_t *foundname, dns_rdataset_t *rdataset, + dns_name_t *foundname, + dns_clientinfomethods_t *methods ISC_ATTR_UNUSED, + dns_clientinfo_t *clientinfo ISC_ATTR_UNUSED, + dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG) { isc_result_t result; qpzonedb_t *qpdb = (qpzonedb_t *)db; @@ -4992,7 +4997,7 @@ glue_nsdname_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype, result = qpzone_find(ctx->db, name, ctx->version, dns_rdatatype_a, DNS_DBFIND_GLUEOK, 0, (dns_dbnode_t **)&node_a, - name_a, &rdataset_a, + name_a, NULL, NULL, &rdataset_a, &sigrdataset_a DNS__DB_FLARG_PASS); if (result == DNS_R_GLUE) { glue = new_glue(ctx->db->mctx, name_a); @@ -5011,7 +5016,7 @@ glue_nsdname_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype, result = qpzone_find(ctx->db, name, ctx->version, dns_rdatatype_aaaa, DNS_DBFIND_GLUEOK, 0, (dns_dbnode_t **)&node_aaaa, - name_aaaa, &rdataset_aaaa, + name_aaaa, NULL, NULL, &rdataset_aaaa, &sigrdataset_aaaa DNS__DB_FLARG_PASS); if (result == DNS_R_GLUE) { if (glue == NULL) { diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c index c68e2e3764..14f67b81b0 100644 --- a/lib/dns/sdlz.c +++ b/lib/dns/sdlz.c @@ -618,17 +618,11 @@ getnodedata(dns_db_t *db, const dns_name_t *name, bool create, return ISC_R_SUCCESS; } -static isc_result_t -findnodeext(dns_db_t *db, const dns_name_t *name, bool create, - dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, - dns_dbnode_t **nodep DNS__DB_FLARG) { - return getnodedata(db, name, create, 0, methods, clientinfo, nodep); -} - static isc_result_t findnode(dns_db_t *db, const dns_name_t *name, bool create, + dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, dns_dbnode_t **nodep DNS__DB_FLARG) { - return getnodedata(db, name, create, 0, NULL, NULL, nodep); + return getnodedata(db, name, create, 0, methods, clientinfo, nodep); } static void @@ -771,11 +765,11 @@ findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, } static isc_result_t -findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, - dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, - dns_dbnode_t **nodep, dns_name_t *foundname, - dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, - dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG) { +find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, + dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, + dns_dbnode_t **nodep, dns_name_t *foundname, + dns_clientinfomethods_t *methods, dns_clientinfo_t *clientinfo, + dns_rdataset_t *rdataset, dns_rdataset_t *sigrdataset DNS__DB_FLARG) { dns_sdlz_db_t *sdlz = (dns_sdlz_db_t *)db; dns_dbnode_t *node = NULL; dns_fixedname_t fname; @@ -935,15 +929,6 @@ findext(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, return result; } -static isc_result_t -find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, - dns_rdatatype_t type, unsigned int options, isc_stdtime_t now, - dns_dbnode_t **nodep, dns_name_t *foundname, dns_rdataset_t *rdataset, - dns_rdataset_t *sigrdataset DNS__DB_FLARG) { - return findext(db, name, version, type, options, now, nodep, foundname, - NULL, NULL, rdataset, sigrdataset DNS__DB_FLARG_PASS); -} - static isc_result_t allrdatasets(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, unsigned int options, isc_stdtime_t now, @@ -1162,8 +1147,6 @@ static dns_dbmethods_t sdlzdb_methods = { .issecure = issecure, .nodecount = nodecount, .getoriginnode = getoriginnode, - .findnodeext = findnodeext, - .findext = findext, }; /* From 18db48eb2cda6957224a12d8223d7e4d33405a8f Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Mon, 4 Aug 2025 21:26:01 -0700 Subject: [PATCH 5/9] remove node lock for settrust and clearprefetch dns_rdataset_clearprefetch() performs an atomic operation, so it didn't actually need to lock the database node. dns_rdataset_settrust() updates header->trust; this is also now atomic, so it doesn't need to lock the node now either. --- lib/dns/include/dns/rdataslab.h | 6 ++--- lib/dns/qpcache.c | 47 ++++++++++++++++++--------------- lib/dns/qpzone.c | 4 +-- lib/dns/rdataslab.c | 7 ++--- 4 files changed, 33 insertions(+), 31 deletions(-) diff --git a/lib/dns/include/dns/rdataslab.h b/lib/dns/include/dns/rdataslab.h index da60c8d469..76df3b78fe 100644 --- a/lib/dns/include/dns/rdataslab.h +++ b/lib/dns/include/dns/rdataslab.h @@ -83,13 +83,13 @@ struct dns_slabtop { }; struct dns_slabheader { - _Atomic(uint16_t) attributes; + _Atomic(uint16_t) attributes; + _Atomic(dns_trust_t) trust; /*% * Locked by the owning node's lock. */ - dns_trust_t trust; - uint32_t serial; + uint32_t serial; union { isc_stdtime_t expire; dns_ttl_t ttl; diff --git a/lib/dns/qpcache.c b/lib/dns/qpcache.c index 5d60c092d8..b6224c77ac 100644 --- a/lib/dns/qpcache.c +++ b/lib/dns/qpcache.c @@ -1045,7 +1045,7 @@ bindrdataset(qpcache_t *qpdb, qpcnode_t *node, dns_slabheader_t *header, rdataset->covers = DNS_TYPEPAIR_COVERS(header->typepair); } rdataset->ttl = !ZEROTTL(header) ? header->expire - now : 0; - rdataset->trust = header->trust; + rdataset->trust = atomic_load(&header->trust); rdataset->resign = 0; if (NEGATIVE(header)) { @@ -1313,7 +1313,7 @@ check_zonecut(qpcnode_t *node, void *arg DNS__DB_FLARG) { } } - if (found != NULL && (!DNS_TRUST_PENDING(found->trust) || + if (found != NULL && (!DNS_TRUST_PENDING(atomic_load(&found->trust)) || (search->options & DNS_DBFIND_PENDINGOK) != 0)) { /* @@ -1506,14 +1506,19 @@ find_coveringnsec(qpc_search_t *search, const dns_name_t *name, return result; } -#define MISSING_ANSWER(found, options) \ - ((found) == NULL || \ - (DNS_TRUST_ADDITIONAL((found)->trust) && \ - (((options) & DNS_DBFIND_ADDITIONALOK) == 0)) || \ - ((found)->trust == dns_trust_glue && \ - (((options) & DNS_DBFIND_GLUEOK) == 0)) || \ - (DNS_TRUST_PENDING((found)->trust) && \ - (((options) & DNS_DBFIND_PENDINGOK) == 0))) +static inline bool +missing_answer(dns_slabheader_t *found, unsigned int options) { + if (found == NULL) { + return true; + } + + dns_trust_t trust = atomic_load(&found->trust); + return (DNS_TRUST_ADDITIONAL(trust) && + (options & DNS_DBFIND_ADDITIONALOK) == 0) || + (DNS_TRUST_GLUE(trust) && (options & DNS_DBFIND_GLUEOK) == 0) || + (DNS_TRUST_PENDING(trust) && + (options & DNS_DBFIND_PENDINGOK) == 0); +} static void qpc_search_init(qpc_search_t *search, qpcache_t *db, unsigned int options, @@ -1698,7 +1703,7 @@ qpcache_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, empty_node = false; if (header->noqname != NULL && - header->trust == dns_trust_secure) + atomic_load(&header->trust) == dns_trust_secure) { found_noqname = true; } @@ -1710,15 +1715,14 @@ qpcache_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, bool match = false; if (related_headers(header, typepair, sigpair, &found, &foundsig, &match) && - !MISSING_ANSWER(found, options)) + !missing_answer(found, options)) { /* * We can't exit early until we have an answer with - * sufficient trust level, see MISSING_ANSWER() macro - * for details, because we might need NS or NSEC + * sufficient trust level - see missing_answer() + * for details - because we might need NS or NSEC * records. */ - break; } @@ -1808,7 +1812,7 @@ qpcache_find(dns_db_t *db, const dns_name_t *name, dns_dbversion_t *version, /* * If we didn't find what we were looking for... */ - if (MISSING_ANSWER(found, options)) { + if (missing_answer(found, options)) { /* * Return covering NODATA NSEC record. */ @@ -2748,7 +2752,8 @@ add(qpcache_t *qpdb, qpcnode_t *qpnode, dns_slabheader_t *newheader, * data will supersede it below. Unclear what the best * policy is here. */ - if (trust < oldheader->trust && + dns_trust_t oldtrust = atomic_load(&oldheader->trust); + if (trust < oldtrust && (ACTIVE(oldheader, now) || !EXISTS(oldheader))) { qpcache_hit(qpdb, oldheader); @@ -2781,7 +2786,7 @@ add(qpcache_t *qpdb, qpcnode_t *qpnode, dns_slabheader_t *newheader, if (ACTIVE(oldheader, now) && oldheader->typepair == DNS_TYPEPAIR(dns_rdatatype_ns) && EXISTS(oldheader) && EXISTS(newheader) && - oldheader->trust >= newheader->trust && + newheader->trust < oldtrust && oldheader->expire < newheader->expire && dns_rdataslab_equalx( oldheader, newheader, qpdb->common.rdclass, @@ -2815,14 +2820,14 @@ add(qpcache_t *qpdb, qpcnode_t *qpnode, dns_slabheader_t *newheader, } /* - * If we will be replacing a NS RRset force its TTL + * If we will be replacing an NS RRset, force its TTL * to be no more than the current NS RRset's TTL. This * ensures the delegations that are withdrawn are honoured. */ if (ACTIVE(oldheader, now) && oldheader->typepair == DNS_TYPEPAIR(dns_rdatatype_ns) && EXISTS(oldheader) && EXISTS(newheader) && - oldheader->trust <= newheader->trust) + newheader->trust > oldtrust) { if (newheader->expire > oldheader->expire) { if (ZEROTTL(oldheader)) { @@ -2841,7 +2846,7 @@ add(qpcache_t *qpdb, qpcnode_t *qpnode, dns_slabheader_t *newheader, oldheader->typepair == DNS_SIGTYPEPAIR(dns_rdatatype_ds)) && EXISTS(oldheader) && EXISTS(newheader) && - oldheader->trust >= newheader->trust && + newheader->trust < oldtrust && oldheader->expire < newheader->expire && dns_rdataslab_equal(oldheader, newheader)) { diff --git a/lib/dns/qpzone.c b/lib/dns/qpzone.c index 4642d04bee..e9dda2c36b 100644 --- a/lib/dns/qpzone.c +++ b/lib/dns/qpzone.c @@ -981,7 +981,7 @@ bindrdataset(qpzonedb_t *qpdb, qpznode_t *node, dns_slabheader_t *header, rdataset->type = DNS_TYPEPAIR_TYPE(header->typepair); rdataset->covers = DNS_TYPEPAIR_COVERS(header->typepair); rdataset->ttl = header->ttl; - rdataset->trust = header->trust; + rdataset->trust = atomic_load(&header->trust); if (OPTOUT(header)) { rdataset->attributes.optout = true; @@ -2137,7 +2137,7 @@ loading_addrdataset(void *arg, const dns_name_t *name, dns_slabheader_reset(newheader, (dns_dbnode_t *)node); newheader->ttl = rdataset->ttl; - newheader->trust = rdataset->trust; + atomic_store(&newheader->trust, rdataset->trust); newheader->serial = 1; dns_slabheader_setownercase(newheader, name); diff --git a/lib/dns/rdataslab.c b/lib/dns/rdataslab.c index f611da9fe4..3616b3aead 100644 --- a/lib/dns/rdataslab.c +++ b/lib/dns/rdataslab.c @@ -1123,9 +1123,8 @@ static void rdataset_settrust(dns_rdataset_t *rdataset, dns_trust_t trust) { dns_slabheader_t *header = dns_rdataset_getheader(rdataset); - dns_db_locknode(header->node, isc_rwlocktype_write); - header->trust = rdataset->trust = trust; - dns_db_unlocknode(header->node, isc_rwlocktype_write); + rdataset->trust = trust; + atomic_store(&header->trust, trust); } static void @@ -1139,9 +1138,7 @@ static void rdataset_clearprefetch(dns_rdataset_t *rdataset) { dns_slabheader_t *header = dns_rdataset_getheader(rdataset); - dns_db_locknode(header->node, isc_rwlocktype_write); DNS_SLABHEADER_CLRATTR(header, DNS_SLABHEADERATTR_PREFETCH); - dns_db_unlocknode(header->node, isc_rwlocktype_write); } static void From b2009e1ebc76823768a2d33d5d36fc3a44263940 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Thu, 7 Aug 2025 12:49:03 -0700 Subject: [PATCH 6/9] remove unnecessary dns_db_nodefullname() now that node->name is accessible as a common dbnode member, it's no longer necessary to provide an API call for that. --- bin/tests/system/dyndb/driver/db.c | 10 ++++------ lib/dns/db.c | 11 ----------- lib/dns/include/dns/db.h | 13 ------------- lib/dns/qpzone.c | 13 ------------- 4 files changed, 4 insertions(+), 43 deletions(-) diff --git a/bin/tests/system/dyndb/driver/db.c b/bin/tests/system/dyndb/driver/db.c index f11f6930e4..f23e0793c8 100644 --- a/bin/tests/system/dyndb/driver/db.c +++ b/bin/tests/system/dyndb/driver/db.c @@ -189,9 +189,8 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, CHECK(dns__db_addrdataset(sampledb->db, node, version, now, rdataset, options, addedrdataset DNS__DB_FLARG_PASS)); if (dns_rdatatype_isaddr(rdataset->type)) { - CHECK(dns_db_nodefullname(node, dns_fixedname_name(&name))); - CHECK(syncptrs(sampledb->inst, dns_fixedname_name(&name), - rdataset, DNS_DIFFOP_ADD)); + CHECK(syncptrs(sampledb->inst, &node->name, rdataset, + DNS_DIFFOP_ADD)); } cleanup: @@ -217,9 +216,8 @@ subtractrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, } if (dns_rdatatype_isaddr(rdataset->type)) { - CHECK(dns_db_nodefullname(node, dns_fixedname_name(&name))); - CHECK(syncptrs(sampledb->inst, dns_fixedname_name(&name), - rdataset, DNS_DIFFOP_DEL)); + CHECK(syncptrs(sampledb->inst, &node->name, rdataset, + DNS_DIFFOP_DEL)); } cleanup: diff --git a/lib/dns/db.c b/lib/dns/db.c index bb47ce386d..c75c250b21 100644 --- a/lib/dns/db.c +++ b/lib/dns/db.c @@ -1072,17 +1072,6 @@ dns_db_deletedata(dns_dbnode_t *node, void *data) { } } -isc_result_t -dns_db_nodefullname(dns_dbnode_t *node, dns_name_t *name) { - REQUIRE(node != NULL && node->methods != NULL); - REQUIRE(name != NULL); - - if (node->methods != NULL && node->methods->nodefullname != NULL) { - return node->methods->nodefullname(node, name); - } - return ISC_R_NOTIMPLEMENTED; -} - void dns_db_setmaxrrperset(dns_db_t *db, uint32_t value) { REQUIRE(DNS_DB_VALID(db)); diff --git a/lib/dns/include/dns/db.h b/lib/dns/include/dns/db.h index 6ce4daa6c5..23f14030a7 100644 --- a/lib/dns/include/dns/db.h +++ b/lib/dns/include/dns/db.h @@ -76,8 +76,6 @@ extern unsigned int dns_pps; *****/ typedef struct dns_dbnode_methods { - isc_result_t (*nodefullname)(dns_dbnode_t *node, dns_name_t *name); - void (*attachnode)(dns_dbnode_t *source, dns_dbnode_t **targetp DNS__DB_FLARG); void (*detachnode)(dns_dbnode_t **targetp DNS__DB_FLARG); @@ -1764,17 +1762,6 @@ dns_db_deletedata(dns_dbnode_t *node, void *data); * data from an LRU list or a heap. */ -isc_result_t -dns_db_nodefullname(dns_dbnode_t *node, dns_name_t *name); -/*%< - * Get the name associated with a database node. - * - * Requires: - * - * \li 'db' is a valid database - * \li 'node' and 'name' are not NULL - */ - void dns_db_setmaxrrperset(dns_db_t *db, uint32_t value); /*%< diff --git a/lib/dns/qpzone.c b/lib/dns/qpzone.c index e9dda2c36b..460f830851 100644 --- a/lib/dns/qpzone.c +++ b/lib/dns/qpzone.c @@ -4922,18 +4922,6 @@ qpzone_deleterdataset(dns_db_t *db, dns_dbnode_t *dbnode, return result; } -static isc_result_t -nodefullname(dns_dbnode_t *node, dns_name_t *name) { - REQUIRE(node != NULL); - REQUIRE(name != NULL); - - qpznode_t *qpnode = (qpznode_t *)node; - - dns_name_copy(&qpnode->name, name); - - return ISC_R_SUCCESS; -} - static dns_glue_t * new_glue(isc_mem_t *mctx, const dns_name_t *name) { dns_glue_t *glue = isc_mem_get(mctx, sizeof(*glue)); @@ -5302,7 +5290,6 @@ static dns_dbmethods_t qpdb_zonemethods = { }; static dns_dbnode_methods_t qpznode_methods = (dns_dbnode_methods_t){ - .nodefullname = nodefullname, .attachnode = qpzone_attachnode, .detachnode = qpzone_detachnode, .locknode = locknode, From 7a5344d5910640a1cae9bc6c7f46027e31468e20 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Thu, 7 Aug 2025 14:24:01 -0700 Subject: [PATCH 7/9] minor cleanup in sdlz.c dns_db_issecure() and dns_db_nodecount() return false and 0, respectively, if they are not implemented, so there's no need to have implementation functions that only return false and 0. --- lib/dns/sdlz.c | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c index 14f67b81b0..8ba7cc3dd8 100644 --- a/lib/dns/sdlz.c +++ b/lib/dns/sdlz.c @@ -1092,21 +1092,6 @@ deleterdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, return result; } -static bool -issecure(dns_db_t *db) { - UNUSED(db); - - return false; -} - -static unsigned int -nodecount(dns_db_t *db, dns_dbtree_t tree) { - UNUSED(db); - UNUSED(tree); - - return 0; -} - /* * getoriginnode() is used by the update code to find the * dns_rdatatype_dnskey record for a zone @@ -1144,8 +1129,6 @@ static dns_dbmethods_t sdlzdb_methods = { .addrdataset = addrdataset, .subtractrdataset = subtractrdataset, .deleterdataset = deleterdataset, - .issecure = issecure, - .nodecount = nodecount, .getoriginnode = getoriginnode, }; From 17101fa4914e43a7585c6f6aa7581174cf62e264 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Mon, 11 Aug 2025 12:13:53 -0700 Subject: [PATCH 8/9] make getoriginnode implementation optional if the dns_db_getoriginnode() call is not implemented, we can fall back to running dns_db_findnode() on the database origin. we now only implement getoriginnode directly in databases where it's clearly faster than the fallback implementation would be. --- bin/named/builtin.c | 36 ------------------------------------ lib/dns/db.c | 3 +++ lib/dns/sdlz.c | 24 ------------------------ 3 files changed, 3 insertions(+), 60 deletions(-) diff --git a/bin/named/builtin.c b/bin/named/builtin.c index a9049b536f..c24fbe164e 100644 --- a/bin/named/builtin.c +++ b/bin/named/builtin.c @@ -822,41 +822,6 @@ destroynode(bdbnode_t *node) { dns_db_detach((dns_db_t **)(void *)&bdb); } -static isc_result_t -getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) { - bdb_t *bdb = (bdb_t *)db; - bdbnode_t *node = NULL; - isc_result_t result; - dns_name_t relname; - dns_name_t *name = NULL; - - REQUIRE(VALID_BDB(bdb)); - REQUIRE(nodep != NULL && *nodep == NULL); - - dns_name_init(&relname); - name = &relname; - - result = createnode(bdb, &node); - if (result != ISC_R_SUCCESS) { - return result; - } - - result = builtin_lookup(bdb, name, node); - if (result != ISC_R_SUCCESS && result != ISC_R_NOTFOUND) { - destroynode(node); - return result; - } - - result = builtin_authority(bdb, node); - if (result != ISC_R_SUCCESS) { - destroynode(node); - return result; - } - - *nodep = (dns_dbnode_t *)node; - return ISC_R_SUCCESS; -} - static isc_result_t findnode(dns_db_t *db, const dns_name_t *name, bool create, dns_clientinfomethods_t *methods ISC_ATTR_UNUSED, @@ -1154,7 +1119,6 @@ static dns_dbmethods_t bdb_methods = { .closeversion = closeversion, .findrdataset = findrdataset, .allrdatasets = allrdatasets, - .getoriginnode = getoriginnode, .findnode = findnode, .find = find, }; diff --git a/lib/dns/db.c b/lib/dns/db.c index c75c250b21..08805b0535 100644 --- a/lib/dns/db.c +++ b/lib/dns/db.c @@ -797,6 +797,9 @@ dns__db_getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) { if (db->methods->getoriginnode != NULL) { return (db->methods->getoriginnode)(db, nodep DNS__DB_FLARG_PASS); + } else if (db->methods->findnode != NULL) { + return (db->methods->findnode)(db, &db->origin, false, NULL, + NULL, nodep DNS__DB_FLARG_PASS); } return ISC_R_NOTFOUND; diff --git a/lib/dns/sdlz.c b/lib/dns/sdlz.c index 8ba7cc3dd8..3852b06b1e 100644 --- a/lib/dns/sdlz.c +++ b/lib/dns/sdlz.c @@ -1092,29 +1092,6 @@ deleterdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version, return result; } -/* - * getoriginnode() is used by the update code to find the - * dns_rdatatype_dnskey record for a zone - */ -static isc_result_t -getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) { - dns_sdlz_db_t *sdlz = (dns_sdlz_db_t *)db; - isc_result_t result; - - REQUIRE(VALID_SDLZDB(sdlz)); - if (sdlz->dlzimp->methods->newversion == NULL) { - return ISC_R_NOTIMPLEMENTED; - } - - result = getnodedata(db, &sdlz->common.origin, false, 0, NULL, NULL, - nodep); - if (result != ISC_R_SUCCESS) { - sdlz_log(ISC_LOG_ERROR, "sdlz getoriginnode failed: %s", - isc_result_totext(result)); - } - return result; -} - static dns_dbmethods_t sdlzdb_methods = { .destroy = destroy, .currentversion = currentversion, @@ -1129,7 +1106,6 @@ static dns_dbmethods_t sdlzdb_methods = { .addrdataset = addrdataset, .subtractrdataset = subtractrdataset, .deleterdataset = deleterdataset, - .getoriginnode = getoriginnode, }; /* From 4122143c4d1ba5d242603daea619a2fcccc57a8f Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Thu, 14 Aug 2025 16:28:11 -0700 Subject: [PATCH 9/9] remove dns_db_{un,}locknode remove the dns_db_locknode() and _unlocknode() calls, so that callers no longer have the ability to directly manipulate the internal locking of cache and zone databases. --- lib/dns/db.c | 16 ---------------- lib/dns/include/dns/db.h | 12 ------------ lib/dns/qpcache.c | 22 ---------------------- lib/dns/qpzone.c | 16 ---------------- 4 files changed, 66 deletions(-) diff --git a/lib/dns/db.c b/lib/dns/db.c index 08805b0535..9200352024 100644 --- a/lib/dns/db.c +++ b/lib/dns/db.c @@ -1043,22 +1043,6 @@ dns_db_addglue(dns_db_t *db, dns_dbversion_t *version, dns_rdataset_t *rdataset, return ISC_R_NOTIMPLEMENTED; } -void -dns_db_locknode(dns_dbnode_t *node, isc_rwlocktype_t type) { - REQUIRE(node != NULL && node->methods != NULL); - if (node->methods->locknode != NULL) { - (node->methods->locknode)(node, type); - } -} - -void -dns_db_unlocknode(dns_dbnode_t *node, isc_rwlocktype_t type) { - REQUIRE(node != NULL && node->methods != NULL); - if (node->methods->unlocknode != NULL) { - (node->methods->unlocknode)(node, type); - } -} - void dns_db_expiredata(dns_dbnode_t *node, void *data) { REQUIRE(node != NULL && node->methods != NULL); diff --git a/lib/dns/include/dns/db.h b/lib/dns/include/dns/db.h index 23f14030a7..7ebeeb2253 100644 --- a/lib/dns/include/dns/db.h +++ b/lib/dns/include/dns/db.h @@ -80,9 +80,6 @@ typedef struct dns_dbnode_methods { dns_dbnode_t **targetp DNS__DB_FLARG); void (*detachnode)(dns_dbnode_t **targetp DNS__DB_FLARG); - void (*locknode)(dns_dbnode_t *node, isc_rwlocktype_t t); - void (*unlocknode)(dns_dbnode_t *node, isc_rwlocktype_t t); - void (*deletedata)(dns_dbnode_t *node, void *data); void (*expiredata)(dns_dbnode_t *node, void *data); } dns_dbnode_methods_t; @@ -1718,15 +1715,6 @@ dns_db_setgluecachestats(dns_db_t *db, isc_stats_t *stats); * dns_rdatasetstats_create(); otherwise NULL. */ -void -dns_db_locknode(dns_dbnode_t *node, isc_rwlocktype_t type); -void -dns_db_unlocknode(dns_dbnode_t *node, isc_rwlocktype_t type); -/*%< - * Lock/unlock a single node within a database so that data stored - * there can be manipulated directly. - */ - isc_result_t dns_db_addglue(dns_db_t *db, dns_dbversion_t *version, dns_rdataset_t *rdataset, dns_message_t *msg); diff --git a/lib/dns/qpcache.c b/lib/dns/qpcache.c index b6224c77ac..0d0e9b1bd2 100644 --- a/lib/dns/qpcache.c +++ b/lib/dns/qpcache.c @@ -305,10 +305,6 @@ qpcnode_attachnode(dns_dbnode_t *source, dns_dbnode_t **targetp DNS__DB_FLARG); static void qpcnode_detachnode(dns_dbnode_t **nodep DNS__DB_FLARG); static void -qpcnode_locknode(dns_dbnode_t *node, isc_rwlocktype_t type); -static void -qpcnode_unlocknode(dns_dbnode_t *node, isc_rwlocktype_t type); -static void qpcnode_deletedata(dns_dbnode_t *node, void *data); static void qpcnode_expiredata(dns_dbnode_t *node, void *data); @@ -316,8 +312,6 @@ qpcnode_expiredata(dns_dbnode_t *node, void *data); static dns_dbnode_methods_t qpcnode_methods = (dns_dbnode_methods_t){ .attachnode = qpcnode_attachnode, .detachnode = qpcnode_detachnode, - .locknode = qpcnode_locknode, - .unlocknode = qpcnode_unlocknode, .deletedata = qpcnode_deletedata, .expiredata = qpcnode_expiredata, }; @@ -3264,22 +3258,6 @@ nodecount(dns_db_t *db, dns_dbtree_t tree) { return mu.leaves; } -static void -qpcnode_locknode(dns_dbnode_t *node, isc_rwlocktype_t type) { - qpcnode_t *qpnode = (qpcnode_t *)node; - qpcache_t *qpdb = qpnode->qpdb; - - RWLOCK(&qpdb->buckets[qpnode->locknum].lock, type); -} - -static void -qpcnode_unlocknode(dns_dbnode_t *node, isc_rwlocktype_t type) { - qpcnode_t *qpnode = (qpcnode_t *)node; - qpcache_t *qpdb = qpnode->qpdb; - - RWUNLOCK(&qpdb->buckets[qpnode->locknum].lock, type); -} - isc_result_t dns__qpcache_create(isc_mem_t *mctx, const dns_name_t *origin, dns_dbtype_t type, dns_rdataclass_t rdclass, diff --git a/lib/dns/qpzone.c b/lib/dns/qpzone.c index 460f830851..e081f15c26 100644 --- a/lib/dns/qpzone.c +++ b/lib/dns/qpzone.c @@ -3886,20 +3886,6 @@ getoriginnode(dns_db_t *db, dns_dbnode_t **nodep DNS__DB_FLARG) { return ISC_R_SUCCESS; } -static void -locknode(dns_dbnode_t *dbnode, isc_rwlocktype_t type) { - qpznode_t *node = (qpznode_t *)dbnode; - - RWLOCK(qpzone_get_lock(node), type); -} - -static void -unlocknode(dns_dbnode_t *dbnode, isc_rwlocktype_t type) { - qpznode_t *node = (qpznode_t *)dbnode; - - RWUNLOCK(qpzone_get_lock(node), type); -} - static void deletedata(dns_dbnode_t *node ISC_ATTR_UNUSED, void *data) { dns_slabheader_t *header = data; @@ -5292,8 +5278,6 @@ static dns_dbmethods_t qpdb_zonemethods = { static dns_dbnode_methods_t qpznode_methods = (dns_dbnode_methods_t){ .attachnode = qpzone_attachnode, .detachnode = qpzone_detachnode, - .locknode = locknode, - .unlocknode = unlocknode, .deletedata = deletedata, };