Commit 05a59742db for bind

commit 05a59742db919a13c1f8a877d0a4b6d42f4e5c6f
Author: Evan Hunt <each@isc.org>
Date:   Wed Aug 5 12:38:47 2026 -0700

    use dns_name() to cast linkedname objects to dns_name

    instead of the longer dns_linkedname_name() function, we can
    use a function with _Generic to cast all name types to dns_name.
    this improves readibility and also allows other types (such as
    dns_fixedname) to be converted the same way.

diff --git a/bin/delv/delv.c b/bin/delv/delv.c
index e94bd84701..09a990f782 100644
--- a/bin/delv/delv.c
+++ b/bin/delv/delv.c
@@ -1838,7 +1838,7 @@ resolve_cb(dns_client_t *client, const dns_name_t *query_name,

 	ISC_LIST_FOREACH(*namelist, response_name, link) {
 		ISC_LIST_FOREACH(response_name->list, rdataset, link) {
-			printdata(rdataset, dns_linkedname_name(response_name));
+			printdata(rdataset, dns_name(response_name));
 		}
 	}

@@ -1969,7 +1969,7 @@ recvresponse(void *arg) {
 	}

 	MSG_SECTION_FOREACH(response, DNS_SECTION_ANSWER, linkedname) {
-		const dns_name_t *name = dns_linkedname_name(linkedname);
+		const dns_name_t *name = dns_name(linkedname);
 		dns_rdatatype_t prevtype = dns_rdatatype_none;

 		ISC_LIST_FOREACH(linkedname->list, rdataset, link) {
@@ -2072,7 +2072,7 @@ sendquery(void *arg) {

 	dns_message_gettempname(message, &mname);
 	dns_message_gettemprdataset(message, &mrdataset);
-	dns_name_clone(query_name, dns_linkedname_name(mname));
+	dns_name_clone(query_name, dns_name(mname));
 	dns_rdataset_makequestion(mrdataset, dns_rdataclass_in, qtype);
 	ISC_LIST_APPEND(mname->list, mrdataset, link);
 	dns_message_addname(message, mname, DNS_SECTION_QUESTION);
diff --git a/bin/dig/dighost.c b/bin/dig/dighost.c
index 04c88e097b..d8d80c2656 100644
--- a/bin/dig/dighost.c
+++ b/bin/dig/dighost.c
@@ -2041,7 +2041,7 @@ insert_soa(dig_lookup_t *lookup) {
 	dns_rdatalist_tordataset(rdatalist, rdataset);

 	dns_message_gettempname(lookup->sendmsg, &soaname);
-	dns_name_clone(lookup->name, dns_linkedname_name(soaname));
+	dns_name_clone(lookup->name, dns_name(soaname));
 	ISC_LIST_INIT(soaname->list);
 	ISC_LIST_APPEND(soaname->list, rdataset, link);
 	dns_message_addname(lookup->sendmsg, soaname, DNS_SECTION_AUTHORITY);
@@ -2186,8 +2186,8 @@ setup_lookup(dig_lookup_t *lookup) {
 		len = (unsigned int)strlen(origin);
 		isc_buffer_init(&b, origin, len);
 		isc_buffer_add(&b, len);
-		result = dns_name_fromtext(dns_linkedname_name(oname), &b,
-					   dns_rootname, 0);
+		result = dns_name_fromtext(dns_name(oname), &b, dns_rootname,
+					   0);
 		if (result != ISC_R_SUCCESS) {
 			dns_message_puttempname(lookup->sendmsg, &lookup->name);
 			dns_message_puttempname(lookup->sendmsg, &oname);
@@ -2195,8 +2195,7 @@ setup_lookup(dig_lookup_t *lookup) {
 			      isc_result_totext(result));
 		}
 		if (lookup->trace && lookup->trace_root) {
-			dns_name_clone(dns_rootname,
-				       dns_linkedname_name(lookup->name));
+			dns_name_clone(dns_rootname, dns_name(lookup->name));
 		} else {
 			dns_fixedname_t fixed;
 			dns_name_t *name;
@@ -2209,14 +2208,11 @@ setup_lookup(dig_lookup_t *lookup) {
 			if (result == ISC_R_SUCCESS) {
 				if (!dns_name_isabsolute(name)) {
 					result = dns_name_concatenate(
-						name,
-						dns_linkedname_name(oname),
-						dns_linkedname_name(
-							lookup->name));
+						name, dns_name(oname),
+						dns_name(lookup->name));
 				} else {
 					dns_name_copy(name,
-						      dns_linkedname_name(
-							      lookup->name));
+						      dns_name(lookup->name));
 				}
 			}
 			if (result != ISC_R_SUCCESS) {
@@ -2236,15 +2232,13 @@ setup_lookup(dig_lookup_t *lookup) {
 	} else {
 		debug("using root origin");
 		if (lookup->trace && lookup->trace_root) {
-			dns_name_clone(dns_rootname,
-				       dns_linkedname_name(lookup->name));
+			dns_name_clone(dns_rootname, dns_name(lookup->name));
 		} else {
 			len = (unsigned int)strlen(textname);
 			isc_buffer_init(&b, textname, len);
 			isc_buffer_add(&b, len);
-			result = dns_name_fromtext(
-				dns_linkedname_name(lookup->name), &b,
-				dns_rootname, 0);
+			result = dns_name_fromtext(dns_name(lookup->name), &b,
+						   dns_rootname, 0);
 			if (result != ISC_R_SUCCESS) {
 				dns_message_puttempname(lookup->sendmsg,
 							&lookup->name);
diff --git a/bin/dig/host.c b/bin/dig/host.c
index 5a414ae1f2..5ccb702c17 100644
--- a/bin/dig/host.c
+++ b/bin/dig/host.c
@@ -223,7 +223,7 @@ printsection(dns_message_t *msg, dns_section_t sectionid,
 	MSG_SECTION_FOREACH(msg, sectionid, name) {
 		isc_buffer_init(&target, tbuf, sizeof(tbuf));
 		first = true;
-		print_name = dns_linkedname_name(name);
+		print_name = dns_name(name);

 		ISC_LIST_FOREACH(name->list, rdataset, link) {
 			if (query->lookup->rdtype == dns_rdatatype_axfr &&
diff --git a/bin/dnssec/dnssec-signzone.c b/bin/dnssec/dnssec-signzone.c
index ac57377983..b353cdf117 100644
--- a/bin/dnssec/dnssec-signzone.c
+++ b/bin/dnssec/dnssec-signzone.c
@@ -389,17 +389,16 @@ keythatsigned(dns_rdata_rrsig_t *rrsig) {
 		return key;
 	}

-	result = dst_key_fromfile(dns_linkedname_name(&rrsig->signer),
-				  rrsig->keyid, rrsig->algorithm,
-				  DST_TYPE_PUBLIC, directory, isc_g_mctx,
-				  &pubkey);
+	result = dst_key_fromfile(dns_name(&rrsig->signer), rrsig->keyid,
+				  rrsig->algorithm, DST_TYPE_PUBLIC, directory,
+				  isc_g_mctx, &pubkey);
 	if (result != ISC_R_SUCCESS) {
 		isc_rwlock_unlock(&keylist_lock, isc_rwlocktype_write);
 		return NULL;
 	}

-	result = dst_key_fromfile(dns_linkedname_name(&rrsig->signer),
-				  rrsig->keyid, rrsig->algorithm,
+	result = dst_key_fromfile(dns_name(&rrsig->signer), rrsig->keyid,
+				  rrsig->algorithm,
 				  DST_TYPE_PUBLIC | DST_TYPE_PRIVATE, directory,
 				  isc_g_mctx, &privkey);
 	if (result == ISC_R_SUCCESS) {
@@ -579,8 +578,7 @@ signset(dns_diff_t *del, dns_diff_t *add, dns_dbnode_t *node, dns_name_t *name,
 					 "invalid validity period\n",
 					 sigstr);
 			} else if (key == NULL && !future &&
-				   expecttofindkey(
-					   dns_linkedname_name(&rrsig.signer)))
+				   expecttofindkey(dns_name(&rrsig.signer)))
 			{
 				/* rrsig is dropped and not replaced */
 				vbprintf(2,
diff --git a/bin/nsupdate/nsupdate.c b/bin/nsupdate/nsupdate.c
index 5a915a73ed..5458649b9b 100644
--- a/bin/nsupdate/nsupdate.c
+++ b/bin/nsupdate/nsupdate.c
@@ -1295,8 +1295,7 @@ parse_name(char **cmdlinep, dns_message_t *msg, dns_linkedname_t **namep) {
 	dns_message_gettempname(msg, namep);
 	isc_buffer_init(&source, word, strlen(word));
 	isc_buffer_add(&source, strlen(word));
-	result = dns_name_fromtext(dns_linkedname_name(*namep), &source,
-				   dns_rootname, 0);
+	result = dns_name_fromtext(dns_name(*namep), &source, dns_rootname, 0);
 	if (result != ISC_R_SUCCESS) {
 		error("invalid owner name: %s", isc_result_totext(result));
 		isc_buffer_invalidate(&source);
@@ -1897,7 +1896,7 @@ update_addordelete(char *cmdline, bool isdelete) {
 	if (retval != STATUS_MORE) {
 		return retval;
 	}
-	const dns_name_t *name = dns_linkedname_name(linkedname);
+	const dns_name_t *name = dns_name(linkedname);

 	dns_message_gettemprdata(updatemsg, &rdata);

@@ -2189,7 +2188,7 @@ setzone(dns_name_t *zonename) {
 		dns_rdataset_t *rdataset = NULL;

 		dns_message_gettempname(updatemsg, &name);
-		dns_name_clone(zonename, dns_linkedname_name(name));
+		dns_name_clone(zonename, dns_name(name));
 		dns_message_gettemprdataset(updatemsg, &rdataset);
 		dns_rdataset_makequestion(rdataset, getzoneclass(),
 					  dns_rdatatype_soa);
@@ -2957,9 +2956,8 @@ droplabel:
 		fatal("could not find enclosing zone");
 	}
 	dns_name_init(&tname);
-	dns_name_getlabelsequence(dns_linkedname_name(name), 1, nlabels - 1,
-				  &tname);
-	dns_name_clone(&tname, dns_linkedname_name(name));
+	dns_name_getlabelsequence(dns_name(name), 1, nlabels - 1, &tname);
+	dns_name_clone(&tname, dns_name(name));
 	dns_request_destroy(&request);
 	dns_message_renderreset(soaquery);
 	dns_message_settsigkey(soaquery, NULL);
@@ -3383,7 +3381,7 @@ start_update(void) {
 	dns_rdataset_makequestion(rdataset, getzoneclass(), dns_rdatatype_soa);

 	if (userzone != NULL) {
-		dns_name_clone(userzone, dns_linkedname_name(name));
+		dns_name_clone(userzone, dns_name(name));
 	} else {
 		dns_rdataset_t *tmprdataset;

@@ -3407,7 +3405,7 @@ start_update(void) {

 		dns_linkedname_t *firstname =
 			ISC_LIST_HEAD(updatemsg->sections[section]);
-		dns_name_clone(firstname, dns_linkedname_name(name));
+		dns_name_clone(firstname, dns_name(name));

 		/*
 		 * Looks to see if the first name references a DS record
@@ -3421,9 +3419,8 @@ start_update(void) {
 		    tmprdataset->type == dns_rdatatype_ds)
 		{
 			unsigned int labels = dns_name_countlabels(name);
-			dns_name_getlabelsequence(dns_linkedname_name(name), 1,
-						  labels - 1,
-						  dns_linkedname_name(name));
+			dns_name_getlabelsequence(dns_name(name), 1, labels - 1,
+						  dns_name(name));
 		}
 	}

diff --git a/bin/plugins/filter-a.c b/bin/plugins/filter-a.c
index c309687458..7346846e6a 100644
--- a/bin/plugins/filter-a.c
+++ b/bin/plugins/filter-a.c
@@ -737,7 +737,7 @@ filter_respond_begin(void *arg, void *cbdata, isc_result_t *resp) {
 			 */
 			result = ns_query_recurse(
 				qctx->client, dns_rdatatype_aaaa,
-				dns_linkedname_name(qctx->client->query.qname),
+				dns_name(qctx->client->query.qname),
 				qctx->resuming);
 			if (result == ISC_R_SUCCESS) {
 				client_state->flags |= FILTER_A_RECURSING;
@@ -751,7 +751,7 @@ filter_respond_begin(void *arg, void *cbdata, isc_result_t *resp) {
 			.qctx = qctx,
 			.mode = client_state->mode,
 			.section = DNS_SECTION_ANSWER,
-			.name = dns_linkedname_name(qctx->fname),
+			.name = dns_name(qctx->fname),
 			.type = dns_rdatatype_a,
 		};
 		process_section(&filter_answer);
@@ -792,7 +792,7 @@ filter_respond_any_found(void *arg, void *cbdata, isc_result_t *resp) {
 			.qctx = qctx,
 			.mode = client_state->mode,
 			.section = DNS_SECTION_ANSWER,
-			.name = dns_linkedname_name(qctx->tname),
+			.name = dns_name(qctx->tname),
 			.type = dns_rdatatype_a,
 			.only_if_aaaa_exists = qctx->authoritative,
 		};
diff --git a/bin/plugins/filter-aaaa.c b/bin/plugins/filter-aaaa.c
index 8bf91aed17..8da56ba998 100644
--- a/bin/plugins/filter-aaaa.c
+++ b/bin/plugins/filter-aaaa.c
@@ -742,7 +742,7 @@ filter_respond_begin(void *arg, void *cbdata, isc_result_t *resp) {
 			 */
 			result = ns_query_recurse(
 				qctx->client, dns_rdatatype_a,
-				dns_linkedname_name(qctx->client->query.qname),
+				dns_name(qctx->client->query.qname),
 				qctx->resuming);
 			if (result == ISC_R_SUCCESS) {
 				client_state->flags |= FILTER_AAAA_RECURSING;
@@ -756,7 +756,7 @@ filter_respond_begin(void *arg, void *cbdata, isc_result_t *resp) {
 			.qctx = qctx,
 			.mode = client_state->mode,
 			.section = DNS_SECTION_ANSWER,
-			.name = dns_linkedname_name(qctx->fname),
+			.name = dns_name(qctx->fname),
 			.type = dns_rdatatype_aaaa,
 		};
 		process_section(&filter_answer);
@@ -797,7 +797,7 @@ filter_respond_any_found(void *arg, void *cbdata, isc_result_t *resp) {
 			.qctx = qctx,
 			.mode = client_state->mode,
 			.section = DNS_SECTION_ANSWER,
-			.name = dns_linkedname_name(qctx->tname),
+			.name = dns_name(qctx->tname),
 			.type = dns_rdatatype_aaaa,
 			.only_if_a_exists = qctx->authoritative,
 		};
diff --git a/bin/plugins/synthrecord.c b/bin/plugins/synthrecord.c
index ba2818ef17..bbe35a0aad 100644
--- a/bin/plugins/synthrecord.c
+++ b/bin/plugins/synthrecord.c
@@ -254,8 +254,7 @@ static ns_hookresult_t
 synthrecord_forward(synthrecord_t *inst, query_ctx_t *qctx,
 		    isc_result_t *resp) {
 	isc_netaddr_t addr;
-	const dns_name_t *qname =
-		dns_linkedname_name(qctx->client->query.qname);
+	const dns_name_t *qname = dns_name(qctx->client->query.qname);

 	*resp = ISC_R_UNSET;

@@ -320,8 +319,7 @@ synthrecord_reverse(synthrecord_t *inst, query_ctx_t *qctx,
 	char anamebdata[DNS_NAME_FORMATSIZE];
 	isc_buffer_t anameb;
 	isc_netaddr_t qaddr;
-	const dns_name_t *qname =
-		dns_linkedname_name(qctx->client->query.qname);
+	const dns_name_t *qname = dns_name(qctx->client->query.qname);
 	dns_rdata_ptr_t synthptrdata;

 	*resp = ISC_R_UNSET;
diff --git a/bin/tests/system/hooks/driver/test-syncplugin.c b/bin/tests/system/hooks/driver/test-syncplugin.c
index 4c0730b1ce..6eef90e4ef 100644
--- a/bin/tests/system/hooks/driver/test-syncplugin.c
+++ b/bin/tests/system/hooks/driver/test-syncplugin.c
@@ -36,8 +36,7 @@ syncplugin__hook(void *arg, void *cbdata, isc_result_t *resp) {
 	UNUSED(resp);

 	if (inst->firstlbl != NULL) {
-		const dns_name_t *qname =
-			dns_linkedname_name(qctx->client->query.qname);
+		const dns_name_t *qname = dns_name(qctx->client->query.qname);
 		dns_label_t label;
 		size_t len = strlen(inst->firstlbl);

diff --git a/bin/tools/mdig.c b/bin/tools/mdig.c
index 5ea6b13d5d..a7b1cdef8b 100644
--- a/bin/tools/mdig.c
+++ b/bin/tools/mdig.c
@@ -576,7 +576,7 @@ sendquery(struct query *query) {

 	dns_message_gettemprdataset(message, &qrdataset);

-	dns_name_clone(&queryname, dns_linkedname_name(qname));
+	dns_name_clone(&queryname, dns_name(qname));
 	dns_rdataset_makequestion(qrdataset, query->rdclass, query->rdtype);
 	ISC_LIST_APPEND(qname->list, qrdataset, link);
 	dns_message_addname(message, qname, DNS_SECTION_QUESTION);
diff --git a/lib/dns/client.c b/lib/dns/client.c
index 9be3f68106..8a90de7e9a 100644
--- a/lib/dns/client.c
+++ b/lib/dns/client.c
@@ -544,7 +544,7 @@ client_resfind(resctx_t *rctx, dns_fetchresponse_t *resp) {
 		ansname = isc_mem_get(mctx, sizeof(*ansname));
 		dns_linkedname_init(ansname);

-		dns_name_dup(aname, mctx, dns_linkedname_name(ansname));
+		dns_name_dup(aname, mctx, dns_name(ansname));

 		switch (result) {
 		case ISC_R_SUCCESS:
@@ -761,7 +761,7 @@ client_resfind(resctx_t *rctx, dns_fetchresponse_t *resp) {
 				ISC_LIST_UNLINK(ansname->list, rdataset, link);
 				putrdataset(mctx, &rdataset);
 			}
-			dns_name_free(dns_linkedname_name(ansname), mctx);
+			dns_name_free(dns_name(ansname), mctx);
 			isc_mem_put(mctx, ansname, sizeof(*ansname));
 		}

@@ -987,7 +987,7 @@ dns_client_freeresanswer(dns_client_t *client, dns_namelist_t *namelist) {
 			putrdataset(client->mctx, &rdataset);
 		}

-		dns_name_free(dns_linkedname_name(name), client->mctx);
+		dns_name_free(dns_name(name), client->mctx);
 		isc_mem_put(client->mctx, name, sizeof(*name));
 	}
 }
diff --git a/lib/dns/deleg.c b/lib/dns/deleg.c
index e12a8aab92..470d9df06f 100644
--- a/lib/dns/deleg.c
+++ b/lib/dns/deleg.c
@@ -465,7 +465,7 @@ addname(dns_delegset_t *delegset, dns_namelist_t *list,

 	clone = isc_mem_get(delegset->mctx, sizeof(*clone));
 	dns_linkedname_init(clone);
-	dns_name_dup(name, delegset->mctx, dns_linkedname_name(clone));
+	dns_name_dup(name, delegset->mctx, dns_name(clone));
 	ISC_LIST_APPEND(*list, clone, link);
 }

diff --git a/lib/dns/dnssec.c b/lib/dns/dnssec.c
index 866476d2c5..70dbb06e8e 100644
--- a/lib/dns/dnssec.c
+++ b/lib/dns/dnssec.c
@@ -190,10 +190,9 @@ digest_sig(dst_context_t *ctx, bool downcase, dns_rdata_t *sigrdata,
 	if (downcase) {
 		dns_fixedname_init(&fname);

-		RUNTIME_CHECK(
-			dns_name_downcase(dns_linkedname_name(&rrsig->signer),
-					  dns_fixedname_name(&fname)) ==
-			ISC_R_SUCCESS);
+		RUNTIME_CHECK(dns_name_downcase(dns_name(&rrsig->signer),
+						dns_fixedname_name(&fname)) ==
+			      ISC_R_SUCCESS);
 		dns_name_toregion(&fname, &r);
 	} else {
 		dns_name_toregion(&rrsig->signer, &r);
@@ -241,12 +240,12 @@ dns_dnssec_sign(const dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
 	/*
 	 * Downcase signer.
 	 */
-	dns_name_init(dns_linkedname_name(&sig.signer));
+	dns_name_init(dns_name(&sig.signer));
 	dns_fixedname_init(&fsigner);
 	RUNTIME_CHECK(dns_name_downcase(dst_key_name(key),
 					dns_fixedname_name(&fsigner)) ==
 		      ISC_R_SUCCESS);
-	dns_name_clone(&fsigner, dns_linkedname_name(&sig.signer));
+	dns_name_clone(&fsigner, dns_name(&sig.signer));

 	sig.covered = set->type;
 	sig.algorithm = dst_algorithm_tosecalg(dst_key_alg(key));
@@ -419,8 +418,7 @@ dns_dnssec_verify(const dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
 	 * for it.
 	 */
 	siglabels = sig.labels + 1;
-	if (siglabels <
-		    dns_name_countlabels(dns_linkedname_name(&sig.signer)) ||
+	if (siglabels < dns_name_countlabels(dns_name(&sig.signer)) ||
 	    siglabels > labels)
 	{
 		inc_stat(dns_dnssecstats_fail);
@@ -462,7 +460,7 @@ dns_dnssec_verify(const dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
 			return DNS_R_INVALIDNSEC3;
 		}
 		dns_name_split(name, labels - 1, NULL, &apex);
-		if (!dns_name_equal(&apex, dns_linkedname_name(&sig.signer))) {
+		if (!dns_name_equal(&apex, dns_name(&sig.signer))) {
 			inc_stat(dns_dnssecstats_fail);
 			return DNS_R_SIGINVALID;
 		}
@@ -496,7 +494,7 @@ dns_dnssec_verify(const dns_name_t *name, dns_rdataset_t *set, dst_key_t *key,
 		dns_rdataset_current(set, &rdata);
 		RETERR(dns_rdata_tostruct(&rdata, &nsec));
 		if (!dns_name_issubdomain(&nsec.next,
-					  dns_linkedname_name(&sig.signer)))
+					  dns_name(&sig.signer)))
 		{
 			return DNS_R_NOVALIDNSEC;
 		}
@@ -632,8 +630,7 @@ cleanup:
 					      wild) == ISC_R_SUCCESS);
 		}
 		if (wildsigner != NULL) {
-			dns_name_copy(dns_linkedname_name(&sig.signer),
-				      wildsigner);
+			dns_name_copy(dns_name(&sig.signer), wildsigner);
 		}
 		inc_stat(dns_dnssecstats_wildcard);
 		result = DNS_R_FROMWILDCARD;
diff --git a/lib/dns/fixedname.c b/lib/dns/fixedname.c
index 737245079b..72d3d7a649 100644
--- a/lib/dns/fixedname.c
+++ b/lib/dns/fixedname.c
@@ -65,13 +65,12 @@ void
 dns_fixedname_init(dns_fixedname_t *fixed) {
 	dns_linkedname_init(&fixed->name_wl);
 	isc_buffer_init(&fixed->buffer, fixed->data, DNS_NAME_MAXWIRE);
-	dns_name_setbuffer(dns_linkedname_name(&fixed->name_wl),
-			   &fixed->buffer);
+	dns_name_setbuffer(dns_name(&fixed->name_wl), &fixed->buffer);
 }

 void
 dns_fixedname_invalidate(dns_fixedname_t *fixed) {
-	dns_name_invalidate(dns_linkedname_name(&fixed->name_wl));
+	dns_name_invalidate(dns_name(&fixed->name_wl));
 }

 dns_name_t *
diff --git a/lib/dns/include/dns/name.h b/lib/dns/include/dns/name.h
index e70b77c293..edeea17796 100644
--- a/lib/dns/include/dns/name.h
+++ b/lib/dns/include/dns/name.h
@@ -1512,6 +1512,9 @@ dns_name_belowroot(const dns_name_t *name) {
 		dns_fixedname_t *: dns_fixedname_name,               \
 		const dns_fixedname_t *: dns_fixedname_name_const)(arg)

+#define dns_name(source)       DNS_NAME__RO_ARG(source)
+#define dns_name_const(source) DNS_NAME__RO_ARG(source)
+
 #define dns_name_clone(source, target) \
 	dns_name__clone(DNS_NAME__RO_ARG(source), target)

diff --git a/lib/dns/message.c b/lib/dns/message.c
index 15305506af..41dfc04784 100644
--- a/lib/dns/message.c
+++ b/lib/dns/message.c
@@ -930,7 +930,7 @@ getquestions(isc_buffer_t *source, dns_message_t *msg, unsigned int options) {
 		 */
 		isc_buffer_remainingregion(source, &r);
 		isc_buffer_setactive(source, r.length);
-		CHECK(dns_name_fromwire(dns_linkedname_name(name), source,
+		CHECK(dns_name_fromwire(dns_name(name), source,
 					DNS_DECOMPRESS_ALWAYS, NULL));

 		ISC_LIST_APPEND(*section, name, link);
@@ -1075,7 +1075,7 @@ getsection(isc_buffer_t *source, dns_message_t *msg, dns_section_t sectionid,
 		 */
 		isc_buffer_remainingregion(source, &r);
 		isc_buffer_setactive(source, r.length);
-		CHECK(dns_name_fromwire(dns_linkedname_name(name), source,
+		CHECK(dns_name_fromwire(dns_name(name), source,
 					DNS_DECOMPRESS_ALWAYS, NULL));

 		/*
@@ -1916,9 +1916,8 @@ dns_message_rendersection(dns_message_t *msg, dns_section_t sectionid,
 			st = *(msg->buffer);
 			count = 0;
 			result = dns_rdataset_towire(
-				rdataset, dns_linkedname_name(name), msg->id,
-				msg->cctx, msg->buffer, partial, rd_options,
-				&count);
+				rdataset, dns_name(name), msg->id, msg->cctx,
+				msg->buffer, partial, rd_options, &count);
 			total += count;
 			if (partial && result == ISC_R_NOSPACE) {
 				msg->flags |= DNS_MESSAGEFLAG_TC;
@@ -1969,9 +1968,9 @@ dns_message_rendersection(dns_message_t *msg, dns_section_t sectionid,

 				count = 0;
 				result = dns_rdataset_towire(
-					rds, dns_linkedname_name(n), msg->id,
-					msg->cctx, msg->buffer, partial,
-					rd_options, &count);
+					rds, dns_name(n), msg->id, msg->cctx,
+					msg->buffer, partial, rd_options,
+					&count);

 				total += count;

@@ -2190,9 +2189,9 @@ dns_message_renderend(dns_message_t *msg) {
 		msg->sig_reserved = 0;
 		RETERR(dns_tsig_sign(msg));
 		count = 0;
-		result = renderset(
-			msg->tsig, dns_linkedname_name(msg->tsigname), msg->id,
-			msg->cctx, msg->buffer, msg->reserved, 0, &count);
+		result = renderset(msg->tsig, dns_name(msg->tsigname), msg->id,
+				   msg->cctx, msg->buffer, msg->reserved, 0,
+				   &count);
 		msg->counts[DNS_SECTION_ADDITIONAL] += count;
 		if (result != ISC_R_SUCCESS) {
 			return result;
@@ -2435,7 +2434,7 @@ dns_message_puttempname(dns_message_t *msg, dns_linkedname_t **itemp) {
 	 * we need to check this in case dns_name_dup() was used.
 	 */
 	if (dns_name_dynamic(item)) {
-		dns_name_free(dns_linkedname_name(item), msg->mctx);
+		dns_name_free(dns_name(item), msg->mctx);
 	}

 	/*
@@ -2647,7 +2646,7 @@ dns_message_gettsig(dns_message_t *msg, const dns_name_t **owner) {
 	REQUIRE(DNS_MESSAGE_VALID(msg));
 	REQUIRE(owner == NULL || *owner == NULL);

-	SET_IF_NOT_NULL(owner, dns_linkedname_name(msg->tsigname));
+	SET_IF_NOT_NULL(owner, dns_name(msg->tsigname));
 	return msg->tsig;
 }

@@ -2768,7 +2767,7 @@ dns_message_getsig0(dns_message_t *msg, const dns_name_t **owner) {
 		if (msg->sig0name == NULL) {
 			*owner = dns_rootname;
 		} else {
-			*owner = dns_linkedname_name(msg->sig0name);
+			*owner = dns_name(msg->sig0name);
 		}
 	}
 	return msg->sig0;
@@ -3244,11 +3243,10 @@ dns_message_sectiontotext(dns_message_t *msg, dns_section_t section,
 					ADD_STRING(target, ";");
 				}
 				result = dns_master_questiontotext(
-					dns_linkedname_name(name), rds, style,
-					target);
+					dns_name(name), rds, style, target);
 			} else {
 				result = dns_master_rdatasettotext(
-					dns_linkedname_name(name), rds, style,
+					dns_name(name), rds, style,
 					&msg->indent, target);
 			}
 			if (result != ISC_R_SUCCESS) {
@@ -3494,7 +3492,7 @@ render_zoneversion(dns_message_t *msg, isc_buffer_t *optbuf,
 	char namebuf[DNS_NAME_FORMATSIZE];
 	dns_linkedname_t *linkedname =
 		ISC_LIST_HEAD(msg->sections[DNS_SECTION_QUESTION]);
-	dns_name_t *name = dns_linkedname_name(linkedname);
+	dns_name_t *name = dns_name(linkedname);
 	dns_name_t suffix = DNS_NAME_INITEMPTY;
 	bool yaml = false, rawmode = false;
 	const char *sep1 = " ", *sep2 = ", ";
diff --git a/lib/dns/notify.c b/lib/dns/notify.c
index e5d96392f2..979ee35c46 100644
--- a/lib/dns/notify.c
+++ b/lib/dns/notify.c
@@ -222,8 +222,7 @@ notify_createmessage(dns_notify_t *notify, dns_message_t **messagep) {
 	/*
 	 * Make question.
 	 */
-	dns_name_clone(dns_zone_getorigin(notify->zone),
-		       dns_linkedname_name(tempname));
+	dns_name_clone(dns_zone_getorigin(notify->zone), dns_name(tempname));
 	dns_rdataset_makequestion(temprdataset, dns_zone_getclass(notify->zone),
 				  notify->type);
 	ISC_LIST_APPEND(tempname->list, temprdataset, link);
@@ -244,8 +243,7 @@ notify_createmessage(dns_notify_t *notify, dns_message_t **messagep) {
 	INSIST(result == ISC_R_SUCCESS);
 	INSIST(zonedb != NULL); /* XXXJT: is this assumption correct? */

-	dns_name_clone(dns_zone_getorigin(notify->zone),
-		       dns_linkedname_name(tempname));
+	dns_name_clone(dns_zone_getorigin(notify->zone), dns_name(tempname));
 	dns_db_currentversion(zonedb, &version);
 	result = dns_db_findnode(zonedb, tempname, false, &node);
 	if (result != ISC_R_SUCCESS) {
diff --git a/lib/dns/qpzone.c b/lib/dns/qpzone.c
index 043765851b..cd3028af13 100644
--- a/lib/dns/qpzone.c
+++ b/lib/dns/qpzone.c
@@ -5429,7 +5429,7 @@ addglue_to_message(qpzonedb_t *qpdb, dns_glue_t *ge, dns_message_t *msg) {

 		dns_message_gettempname(msg, &name);

-		dns_name_copy(&ge->name, dns_linkedname_name(name));
+		dns_name_copy(&ge->name, dns_name(name));

 		if (ge->header_a != NULL) {
 			dns_message_gettemprdataset(msg, &rdataset_a);
diff --git a/lib/dns/rdata/generic/rrsig_46.c b/lib/dns/rdata/generic/rrsig_46.c
index bca2146fa0..386f2755d2 100644
--- a/lib/dns/rdata/generic/rrsig_46.c
+++ b/lib/dns/rdata/generic/rrsig_46.c
@@ -502,7 +502,7 @@ fromstruct_rrsig(ARGS_FROMSTRUCT) {
 	/*
 	 * Signer name.
 	 */
-	RETERR(name_tobuffer(dns_linkedname_name(&sig->signer), target));
+	RETERR(name_tobuffer(dns_name(&sig->signer), target));

 	/*
 	 * Signature.
@@ -569,8 +569,8 @@ tostruct_rrsig(ARGS_TOSTRUCT) {
 	dns_name_init(&signer);
 	dns_name_fromregion(&signer, &sr);
 	dns_linkedname_init(&sig->signer);
-	dns_name_clone(&signer, dns_linkedname_name(&sig->signer));
-	isc_region_consume(&sr, name_length(dns_linkedname_name(&sig->signer)));
+	dns_name_clone(&signer, dns_name(&sig->signer));
+	isc_region_consume(&sr, name_length(dns_name(&sig->signer)));

 	/*
 	 * Signature.
diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c
index 80c2044fa4..76cc9bf03e 100644
--- a/lib/dns/resolver.c
+++ b/lib/dns/resolver.c
@@ -2519,7 +2519,7 @@ resquery_send(resquery_t *query) {
 	/*
 	 * Set up question.
 	 */
-	dns_name_clone(fctx->name, dns_linkedname_name(qname));
+	dns_name_clone(fctx->name, dns_name(qname));
 	dns_rdataset_makequestion(qrdataset, res->rdclass, fctx->type);
 	ISC_LIST_APPEND(qname->list, qrdataset, link);
 	dns_message_addname(fctx->qmessage, qname, DNS_SECTION_QUESTION);
@@ -3755,7 +3755,7 @@ shufflens:
 		bool overquota = false;
 		unsigned int static_stub = 0;
 		unsigned int no_fetch = 0;
-		dns_name_t *ns = dns_linkedname_name(nameservers[i]);
+		dns_name_t *ns = dns_name(nameservers[i]);
 		size_t maxfindlen = max_delegation_servers - *ns_processed;
 		size_t findlen = 0;

@@ -5677,7 +5677,7 @@ get_and_check_signer_name(dns_name_t *signer, dns_rdataset_t *sigrdataset) {
 	dns_rdataset_current(sigrdataset, &rdata);
 	result = dns_rdata_tostruct(&rdata, &rrsig);
 	INSIST(result == ISC_R_SUCCESS);
-	dns_name_copy(dns_linkedname_name(&rrsig.signer), signer);
+	dns_name_copy(dns_name(&rrsig.signer), signer);

 	while (dns_rdataset_next(sigrdataset) == ISC_R_SUCCESS) {
 		rdata = (dns_rdata_t)DNS_RDATA_INIT;
@@ -5685,8 +5685,7 @@ get_and_check_signer_name(dns_name_t *signer, dns_rdataset_t *sigrdataset) {
 		result = dns_rdata_tostruct(&rdata, &rrsig);
 		INSIST(result == ISC_R_SUCCESS);

-		if (!dns_name_equal(signer, dns_linkedname_name(&rrsig.signer)))
-		{
+		if (!dns_name_equal(signer, dns_name(&rrsig.signer))) {
 			return false;
 		}
 	}
@@ -5769,9 +5768,9 @@ fctx_cacheauthority(fetchctx_t *fctx, dns_message_t *message,
 				continue;
 			}

-			result = cache_rrset(
-				fctx, now, dns_linkedname_name(name), rdataset,
-				sigrdataset, NULL, NULL, NULL, false);
+			result = cache_rrset(fctx, now, dns_name(name),
+					     rdataset, sigrdataset, NULL, NULL,
+					     NULL, false);
 			if (result != ISC_R_SUCCESS) {
 				continue;
 			}
@@ -5843,15 +5842,13 @@ validated(void *arg) {
 				 * Cache the data as pending for later
 				 * validation.
 				 */
-				cache_rrset(fctx, now,
-					    dns_linkedname_name(val->name),
+				cache_rrset(fctx, now, dns_name(val->name),
 					    val->rdataset, val->sigrdataset,
 					    NULL, NULL, NULL, false);
 			}
 			break;
 		default:
-			delete_rrset(fctx, dns_linkedname_name(val->name),
-				     val->type);
+			delete_rrset(fctx, dns_name(val->name), val->type);
 		}

 		add_bad(fctx, message, addrinfo, result, badns_validation);
@@ -5904,9 +5901,8 @@ validated(void *arg) {
 		FCTXTRACE("nonexistence validation OK");
 		inc_stats(res, dns_resstatscounter_valnegsuccess);

-		result = negcache(message, fctx, dns_linkedname_name(val->name),
-				  now, val->optout, val->secure, ardataset,
-				  &node);
+		result = negcache(message, fctx, dns_name(val->name), now,
+				  val->optout, val->secure, ardataset, &node);
 		if (result != ISC_R_SUCCESS) {
 			done = true;
 			goto cleanup;
@@ -5934,9 +5930,9 @@ validated(void *arg) {
 	/*
 	 * The data was already cached as pending. Re-cache it as secure.
 	 */
-	result = cache_rrset(fctx, now, dns_linkedname_name(val->name),
-			     val->rdataset, val->sigrdataset, &node, ardataset,
-			     asigrdataset, true);
+	result = cache_rrset(fctx, now, dns_name(val->name), val->rdataset,
+			     val->sigrdataset, &node, ardataset, asigrdataset,
+			     true);
 	if (result != ISC_R_SUCCESS) {
 		done = true;
 		goto cleanup;
@@ -6049,7 +6045,7 @@ findnoqname(fetchctx_t *fctx, dns_message_t *message, dns_linkedname_t *name,
 		return;
 	}

-	labels = dns_name_countlabels(dns_linkedname_name(name));
+	labels = dns_name_countlabels(dns_name(name));

 	result = ISC_R_NOTFOUND;
 	DNS_RDATASET_FOREACH(sigrdataset) {
@@ -6138,8 +6134,7 @@ check_cacheable(dns_linkedname_t *name, dns_rdataset_t *rdataset, bool fail) {
 		char typebuf[DNS_RDATATYPE_FORMATSIZE];
 		char classbuf[DNS_RDATATYPE_FORMATSIZE];

-		dns_name_format(dns_linkedname_name(name), namebuf,
-				sizeof(namebuf));
+		dns_name_format(dns_name(name), namebuf, sizeof(namebuf));
 		dns_rdatatype_format(rdataset->type, typebuf, sizeof(typebuf));
 		dns_rdataclass_format(rdataset->rdclass, classbuf,
 				      sizeof(classbuf));
@@ -6282,9 +6277,9 @@ rctx_cache_secure(respctx_t *rctx, dns_message_t *message,
 		 * in-between.
 		 */

-		RETERR(cache_rrset(fctx, rctx->now, dns_linkedname_name(name),
-				   rdataset, sigrdataset, &node, ardataset,
-				   asigset, need_validation));
+		RETERR(cache_rrset(fctx, rctx->now, dns_name(name), rdataset,
+				   sigrdataset, &node, ardataset, asigset,
+				   need_validation));
 	}

 	return ISC_R_SUCCESS;
@@ -6321,8 +6316,8 @@ rctx_cache_insecure(respctx_t *rctx, dns_message_t *message,
 	/*
 	 * Cache the rdataset.
 	 */
-	result = cache_rrset(fctx, rctx->now, dns_linkedname_name(name),
-			     rdataset, NULL, &node, added, NULL, false);
+	result = cache_rrset(fctx, rctx->now, dns_name(name), rdataset, NULL,
+			     &node, added, NULL, false);

 	return result;
 }
@@ -6346,8 +6341,8 @@ rctx_cachename(respctx_t *rctx, dns_message_t *message,
 	/*
 	 * Is DNSSEC validation required for this name?
 	 */
-	bool secure_domain = issecuredomain(fctx, dns_linkedname_name(name),
-					    fctx->type, rctx->now);
+	bool secure_domain = issecuredomain(fctx, dns_name(name), fctx->type,
+					    rctx->now);
 	bool need_validation = secure_domain &&
 			       ((fctx->options & DNS_FETCHOPT_NOVALIDATE) == 0);

@@ -6982,7 +6977,7 @@ check_section(void *arg, const dns_name_t *addname, dns_rdatatype_t type,
 	result = dns_message_findname(rctx->query->rmessage, section, addname,
 				      dns_rdatatype_any, 0, &name, NULL);
 	if (result == ISC_R_SUCCESS) {
-		external = name_external(dns_linkedname_name(name), type, rctx);
+		external = name_external(dns_name(name), type, rctx);
 		if (type == dns_rdatatype_a) {
 			ISC_LIST_FOREACH(name->list, rdataset, link) {
 				if (dns_rdatatype_issig(rdataset->type)) {
@@ -6991,16 +6986,16 @@ check_section(void *arg, const dns_name_t *addname, dns_rdatatype_t type,
 					rtype = rdataset->type;
 				}
 				if (dns_rdatatype_isaddr(rtype)) {
-					mark_related(dns_linkedname_name(name),
-						     rdataset, external);
+					mark_related(dns_name(name), rdataset,
+						     external);
 				}
 			}
 		} else {
 			dns_rdataset_t *rdataset = NULL;
 			result = dns_message_findtype(name, type, 0, &rdataset);
 			if (result == ISC_R_SUCCESS) {
-				mark_related(dns_linkedname_name(name),
-					     rdataset, external);
+				mark_related(dns_name(name), rdataset,
+					     external);
 				if (found != NULL) {
 					dns_rdataset_clone(rdataset, found);
 				}
@@ -7012,8 +7007,8 @@ check_section(void *arg, const dns_name_t *addname, dns_rdatatype_t type,
 					name, dns_rdatatype_rrsig, type,
 					&rdataset);
 				if (result == ISC_R_SUCCESS) {
-					mark_related(dns_linkedname_name(name),
-						     rdataset, external);
+					mark_related(dns_name(name), rdataset,
+						     external);
 				}
 			}
 		}
@@ -7051,8 +7046,8 @@ is_answeraddress_allowed(dns_view_t *view, dns_linkedname_t *name,
 	 * If the owner name matches one in the exclusion list, either
 	 * exactly or partially, allow it.
 	 */
-	if (dns_nametree_covered(view->answeracl_exclude,
-				 dns_linkedname_name(name), NULL, 0))
+	if (dns_nametree_covered(view->answeracl_exclude, dns_name(name), NULL,
+				 0))
 	{
 		return true;
 	}
@@ -7086,7 +7081,7 @@ is_answeraddress_allowed(dns_view_t *view, dns_linkedname_t *name,
 				       view->aclenv, &match, NULL);
 		if (result == ISC_R_SUCCESS && match > 0) {
 			isc_netaddr_format(&netaddr, addrbuf, sizeof(addrbuf));
-			dns_name_format(dns_linkedname_name(name), namebuf,
+			dns_name_format(dns_name(name), namebuf,
 					sizeof(namebuf));
 			dns_rdatatype_format(rdataset->type, typebuf,
 					     sizeof(typebuf));
@@ -7139,8 +7134,7 @@ is_answertarget_allowed(fetchctx_t *fctx, dns_name_t *qname,
 		tname = &cname.cname;
 		break;
 	case dns_rdatatype_dname:
-		if (dns_name_fullcompare(qname, dns_linkedname_name(rname),
-					 &order,
+		if (dns_name_fullcompare(qname, dns_name(rname), &order,
 					 &nlabels) != dns_namereln_subdomain)
 		{
 			return true;
@@ -7149,7 +7143,7 @@ is_answertarget_allowed(fetchctx_t *fctx, dns_name_t *qname,
 		RUNTIME_CHECK(result == ISC_R_SUCCESS);
 		dns_name_init(&prefix);
 		tname = dns_fixedname_initname(&fixed);
-		nlabels = dns_name_countlabels(dns_linkedname_name(rname));
+		nlabels = dns_name_countlabels(dns_name(rname));
 		dns_name_split(qname, nlabels, &prefix, NULL);
 		result = dns_name_concatenate(&prefix, &dname.dname, tname);
 		if (result == DNS_R_NAMETOOLONG) {
@@ -7583,9 +7577,7 @@ betterreferral(respctx_t *rctx) {
 	dns_message_t *msg = rctx->query->rmessage;

 	MSG_SECTION_FOREACH(msg, DNS_SECTION_AUTHORITY, name) {
-		if (!isstrictsubdomain(dns_linkedname_name(name),
-				       rctx->fctx->domain))
-		{
+		if (!isstrictsubdomain(dns_name(name), rctx->fctx->domain)) {
 			continue;
 		}

@@ -8767,8 +8759,8 @@ rctx_answer_scan(respctx_t *rctx) {
 			/*
 			 * Don't accept DNAME from parent namespace.
 			 */
-			if (name_external(dns_linkedname_name(name),
-					  dns_rdatatype_dname, rctx))
+			if (name_external(dns_name(name), dns_rdatatype_dname,
+					  rctx))
 			{
 				continue;
 			}
@@ -9070,8 +9062,7 @@ rctx_authority_positive(respctx_t *rctx) {
 	}

 	MSG_SECTION_FOREACH(msg, DNS_SECTION_AUTHORITY, name) {
-		if (!name_external(dns_linkedname_name(name), dns_rdatatype_ns,
-				   rctx) &&
+		if (!name_external(dns_name(name), dns_rdatatype_ns, rctx) &&
 		    dns_name_issubdomain(fctx->name, name))
 		{
 			/*
@@ -9096,9 +9087,7 @@ rctx_authority_positive(respctx_t *rctx) {

 					if (rdataset->type == dns_rdatatype_ns)
 					{
-						rctx->ns_name =
-							dns_linkedname_name(
-								name);
+						rctx->ns_name = dns_name(name);
 						rctx->ns_rdataset = rdataset;
 					}
 					/*
@@ -9299,7 +9288,7 @@ rctx_authority_negative(respctx_t *rctx) {

 			switch (type) {
 			case dns_rdatatype_ns:
-				if (name_external(dns_linkedname_name(name),
+				if (name_external(dns_name(name),
 						  dns_rdatatype_ns, rctx))
 				{
 					continue;
@@ -9311,8 +9300,7 @@ rctx_authority_negative(respctx_t *rctx) {
 				 */
 				if (rdataset->type == dns_rdatatype_ns) {
 					if (rctx->ns_name != NULL &&
-					    dns_linkedname_name(name) !=
-						    rctx->ns_name)
+					    dns_name(name) != rctx->ns_name)
 					{
 						log_formerr(
 							fctx,
@@ -9321,8 +9309,7 @@ rctx_authority_negative(respctx_t *rctx) {
 						rctx->result = DNS_R_FORMERR;
 						return ISC_R_COMPLETE;
 					}
-					rctx->ns_name =
-						dns_linkedname_name(name);
+					rctx->ns_name = dns_name(name);
 					rctx->ns_rdataset = rdataset;
 				}
 				break;
@@ -9334,8 +9321,7 @@ rctx_authority_negative(respctx_t *rctx) {
 				 */
 				if (rdataset->type == dns_rdatatype_soa) {
 					if (rctx->soa_name != NULL &&
-					    dns_linkedname_name(name) !=
-						    rctx->soa_name)
+					    dns_name(name) != rctx->soa_name)
 					{
 						log_formerr(
 							fctx,
@@ -9344,8 +9330,7 @@ rctx_authority_negative(respctx_t *rctx) {
 						rctx->result = DNS_R_FORMERR;
 						return ISC_R_COMPLETE;
 					}
-					rctx->soa_name =
-						dns_linkedname_name(name);
+					rctx->soa_name = dns_name(name);
 				}
 				dns_linkedname_attrs(name)->ncache = true;
 				rdataset->attributes.ncache = true;
@@ -9384,7 +9369,7 @@ rctx_authority_dnssec(respctx_t *rctx) {
 			 * Invalid name found; preserve it for logging
 			 * later.
 			 */
-			rctx->found_name = dns_linkedname_name(name);
+			rctx->found_name = dns_name(name);
 			rctx->found_type = ISC_LIST_HEAD(name->list)->type;
 			continue;
 		}
@@ -9443,8 +9428,7 @@ rctx_authority_dnssec(respctx_t *rctx) {
 					return ISC_R_COMPLETE;
 				}

-				if (dns_linkedname_name(name) != rctx->ns_name)
-				{
+				if (dns_name(name) != rctx->ns_name) {
 					log_formerr(fctx,
 						    "%s doesn't match the "
 						    "delegation owner name",
@@ -9456,8 +9440,8 @@ rctx_authority_dnssec(respctx_t *rctx) {
 				rdataset->attributes.cache = true;

 				secure_domain = issecuredomain(
-					fctx, dns_linkedname_name(name),
-					dns_rdatatype_ds, fctx->now);
+					fctx, dns_name(name), dns_rdatatype_ds,
+					fctx->now);
 				if (secure_domain) {
 					rdataset->trust =
 						dns_trust_pending_answer;
diff --git a/lib/dns/tkey.c b/lib/dns/tkey.c
index be6098a3bc..716a05ea13 100644
--- a/lib/dns/tkey.c
+++ b/lib/dns/tkey.c
@@ -119,7 +119,7 @@ add_rdata_to_list(dns_message_t *msg, dns_name_t *name, dns_rdata_t *rdata,
 	dns_message_takebuffer(msg, &tmprdatabuf);

 	dns_message_gettempname(msg, &newname);
-	dns_name_copy(name, dns_linkedname_name(newname));
+	dns_name_copy(name, dns_name(newname));

 	dns_message_gettemprdatalist(msg, &newlist);
 	newlist->rdclass = newrdata->rdclass;
@@ -353,8 +353,8 @@ dns_tkey_processquery(dns_message_t *msg, dns_tkeyctx_t *tctx,
 	/* * Look for a TKEY record that matches the question.
 	 */
 	result = dns_message_findname(msg, DNS_SECTION_ADDITIONAL,
-				      dns_linkedname_name(qname),
-				      dns_rdatatype_tkey, 0, NULL, &tkeyset);
+				      dns_name(qname), dns_rdatatype_tkey, 0,
+				      NULL, &tkeyset);
 	if (result != ISC_R_SUCCESS) {
 		tkey_log("dns_tkey_processquery: couldn't find a TKEY "
 			 "matching the question");
@@ -402,7 +402,7 @@ dns_tkey_processquery(dns_message_t *msg, dns_tkeyctx_t *tctx,
 		/*
 		 * A delete operation uses the fully specified qname.
 		 */
-		keyname = dns_linkedname_name(qname);
+		keyname = dns_name(qname);
 		CHECK(process_deletetkey(signer, keyname, &tkeyin, &tkeyout,
 					 ring));
 		break;
@@ -464,7 +464,7 @@ dns_tkey_processquery(dns_message_t *msg, dns_tkeyctx_t *tctx,
 		/*
 		 * For unrecognized modes also use the fully specified qname.
 		 */
-		keyname = dns_linkedname_name(qname);
+		keyname = dns_name(qname);
 		tkeyout.error = dns_tsigerror_badmode;
 	}

@@ -533,8 +533,8 @@ buildquery(dns_message_t *msg, const dns_name_t *name, dns_rdata_tkey_t *tkey) {
 	dns_message_gettemprdataset(msg, &tkeyset);
 	dns_rdatalist_tordataset(tkeylist, tkeyset);

-	dns_name_copy(name, dns_linkedname_name(qname));
-	dns_name_copy(name, dns_linkedname_name(aname));
+	dns_name_copy(name, dns_name(qname));
+	dns_name_copy(name, dns_name(aname));

 	ISC_LIST_APPEND(qname->list, question, link);
 	ISC_LIST_APPEND(aname->list, tkeyset, link);
@@ -597,7 +597,7 @@ find_tkey(dns_message_t *msg, dns_name_t **name, dns_rdata_t *rdata,
 			RETERR(dns_rdataset_first(tkeyset));

 			dns_rdataset_current(tkeyset, rdata);
-			*name = dns_linkedname_name(cur);
+			*name = dns_name(cur);
 			return ISC_R_SUCCESS;
 		}
 	}
diff --git a/lib/dns/tsig.c b/lib/dns/tsig.c
index dcb6bb9918..c54dddb0fd 100644
--- a/lib/dns/tsig.c
+++ b/lib/dns/tsig.c
@@ -843,7 +843,7 @@ dns_tsig_sign(dns_message_t *msg) {
 	}

 	dns_message_gettempname(msg, &owner);
-	dns_name_copy(key->name, dns_linkedname_name(owner));
+	dns_name_copy(key->name, dns_name(owner));

 	dns_message_gettemprdatalist(msg, &datalist);

@@ -935,7 +935,7 @@ dns_tsig_verify(isc_buffer_t *source, dns_message_t *msg,
 	 * TSIG record.
 	 */

-	keyname = dns_linkedname_name(msg->tsigname);
+	keyname = dns_name(msg->tsigname);
 	RETERR(dns_rdataset_first(msg->tsig));
 	dns_rdataset_current(msg->tsig, &rdata);
 	RETERR(dns_rdata_tostruct(&rdata, &tsig));
@@ -1262,7 +1262,7 @@ tsig_verify_tcp(isc_buffer_t *source, dns_message_t *msg) {
 	if (msg->tsig != NULL) {
 		has_tsig = true;

-		keyname = dns_linkedname_name(msg->tsigname);
+		keyname = dns_name(msg->tsigname);
 		result = dns_rdataset_first(msg->tsig);
 		if (result != ISC_R_SUCCESS) {
 			goto cleanup_querystruct;
diff --git a/lib/dns/validator.c b/lib/dns/validator.c
index 83b5679dbb..6c592a4702 100644
--- a/lib/dns/validator.c
+++ b/lib/dns/validator.c
@@ -951,10 +951,10 @@ validator_callback_dnskey(void *arg) {
 		break;
 	default:
 		expire_rdatasets(val);
-		result = create_fetch(
-			val, dns_linkedname_name(&val->siginfo->signer),
-			dns_rdatatype_dnskey, NULL, NULL, fetch_callback_dnskey,
-			"validator_callback_dnskey");
+		result = create_fetch(val, dns_name(&val->siginfo->signer),
+				      dns_rdatatype_dnskey, NULL, NULL,
+				      fetch_callback_dnskey,
+				      "validator_callback_dnskey");
 		if (result == ISC_R_SUCCESS) {
 			result = DNS_R_WAIT;
 		}
@@ -1375,7 +1375,7 @@ create_ds_fetch(dns_validator_t *val, dns_linkedname_t *name,
 	const dns_name_t *parent = NULL;
 	unsigned int n;

-	n = dns_name_countlabels(dns_linkedname_name(name));
+	n = dns_name_countlabels(dns_name(name));
 	if (n > 1) {
 		pname = dns_fixedname_initname(&pfixed);
 		dns_name_getlabelsequence(dns_linkedname_name(name), 1, n - 1,
@@ -1391,8 +1391,8 @@ create_ds_fetch(dns_validator_t *val, dns_linkedname_t *name,
 		}
 	}

-	result = create_fetch(val, dns_linkedname_name(name), dns_rdatatype_ds,
-			      parent, delegset, callback, caller);
+	result = create_fetch(val, dns_name(name), dns_rdatatype_ds, parent,
+			      delegset, callback, caller);
 	if (delegset != NULL) {
 		dns_delegset_detach(&delegset);
 	}
@@ -1416,8 +1416,7 @@ create_validator(dns_validator_t *val, dns_linkedname_t *name,
 		sig = sigrdataset;
 	}

-	if (check_deadlock(val, dns_linkedname_name(name), type, rdataset, sig))
-	{
+	if (check_deadlock(val, dns_name(name), type, rdataset, sig)) {
 		validator_log(val, ISC_LOG_DEBUG(3),
 			      "deadlock found (create_validator)");
 		return ISC_R_DEADLOCK;
@@ -1427,8 +1426,7 @@ create_validator(dns_validator_t *val, dns_linkedname_t *name,
 	vopts |= (val->options &
 		  (DNS_VALIDATOR_NOCDFLAG | DNS_VALIDATOR_NONTA));

-	validator_logcreate(val, dns_linkedname_name(name), type, caller,
-			    "validator");
+	validator_logcreate(val, dns_name(name), type, caller, "validator");
 	result = dns_validator_create(
 		val->view, name, type, rdataset, sig, NULL, vopts, val->loop,
 		cb, val, val->nvalidations, val->nfails, val->qc, val->gqc,
@@ -1485,9 +1483,9 @@ select_signing_key(dns_validator_t *val, dns_rdataset_t *rdataset) {
 			continue;
 		}

-		result = dns_dnssec_keyfromrdata(
-			dns_linkedname_name(&siginfo->signer), &rdata,
-			val->view->mctx, &val->key);
+		result = dns_dnssec_keyfromrdata(dns_name(&siginfo->signer),
+						 &rdata, val->view->mctx,
+						 &val->key);
 		/* Don't count unsupported algorithm towards max fails */
 		if (result == DST_R_UNSUPPORTEDALG) {
 			/* Continue with the next key */
@@ -1564,7 +1562,7 @@ seek_dnskey(dns_validator_t *val) {
 	/*
 	 * Do we know about this key?
 	 */
-	result = view_find(val, dns_linkedname_name(&siginfo->signer),
+	result = view_find(val, dns_name(&siginfo->signer),
 			   dns_rdatatype_dnskey);
 	switch (result) {
 	case ISC_R_SUCCESS:
@@ -1619,7 +1617,7 @@ seek_dnskey(dns_validator_t *val) {
 		/*
 		 * We don't know anything about this key.
 		 */
-		RETERR(create_fetch(val, dns_linkedname_name(&siginfo->signer),
+		RETERR(create_fetch(val, dns_name(&siginfo->signer),
 				    dns_rdatatype_dnskey, NULL, NULL,
 				    fetch_callback_dnskey, "seek_dnskey"));
 		return DNS_R_WAIT;
@@ -1711,7 +1709,7 @@ static isc_result_t
 selfsigned_dnskey(dns_validator_t *val) {
 	dns_rdataset_t *rdataset = val->rdataset;
 	dns_rdataset_t *sigrdataset = val->sigrdataset;
-	dns_name_t *name = dns_linkedname_name(val->name);
+	dns_name_t *name = dns_name(val->name);
 	isc_result_t result;
 	isc_mem_t *mctx = val->view->mctx;
 	bool match = false;
@@ -1865,9 +1863,9 @@ verify(dns_validator_t *val, dst_key_t *key, dns_rdata_t *rdata,
 	consume_validation(val);

 again:
-	result = dns_dnssec_verify(dns_linkedname_name(val->name),
-				   val->rdataset, key, ignore, val->view->mctx,
-				   rdata, wild, wildsigner);
+	result = dns_dnssec_verify(dns_name(val->name), val->rdataset, key,
+				   ignore, val->view->mctx, rdata, wild,
+				   wildsigner);
 	if ((result == DNS_R_SIGEXPIRED || result == DNS_R_SIGFUTURE) &&
 	    val->view->acceptexpired)
 	{
@@ -2098,8 +2096,7 @@ validate_answer_process(void *arg) {
 	 * was known and "sufficiently good".
 	 */
 	if (!dns_resolver_algorithm_supported(
-		    val->view->resolver,
-		    dns_linkedname_name(&val->siginfo->signer),
+		    val->view->resolver, dns_name(&val->siginfo->signer),
 		    val->siginfo->algorithm, val->siginfo->signature,
 		    val->siginfo->siglen))
 	{
@@ -2343,7 +2340,7 @@ check_signer(dns_validator_t *val, dns_rdata_t *keyrdata, uint16_t keyid,
 	dst_key_t *dstkey = NULL;
 	dns_rdataset_t rdataset = DNS_RDATASET_INIT;

-	RETERR(dns_dnssec_keyfromrdata(dns_linkedname_name(val->name), keyrdata,
+	RETERR(dns_dnssec_keyfromrdata(dns_name(val->name), keyrdata,
 				       val->view->mctx, &dstkey));

 	dns_rdataset_clone(val->sigrdataset, &rdataset);
@@ -2387,7 +2384,7 @@ static isc_result_t
 get_dsset(dns_validator_t *val, dns_linkedname_t *tname, isc_result_t *resp) {
 	isc_result_t result;

-	result = view_find(val, dns_linkedname_name(tname), dns_rdatatype_ds);
+	result = view_find(val, dns_name(tname), dns_rdatatype_ds);
 	switch (result) {
 	case ISC_R_SUCCESS:
 		/*
@@ -2504,9 +2501,8 @@ validate_dnskey_dsset(dns_validator_t *val) {
 		return DNS_R_BADALG;
 	}

-	if (!dns_resolver_ds_digest_supported(val->view->resolver,
-					      dns_linkedname_name(val->name),
-					      ds.digest_type))
+	if (!dns_resolver_ds_digest_supported(
+		    val->view->resolver, dns_name(val->name), ds.digest_type))
 	{
 		if (val->unsupported_digest == 0) {
 			val->unsupported_digest = ds.digest_type;
@@ -2537,7 +2533,7 @@ validate_dnskey_dsset(dns_validator_t *val) {
 			     ds.algorithm != DNS_KEYALG_PRIVATEOID))
 	{
 		if (!dns_resolver_algorithm_supported(
-			    val->view->resolver, dns_linkedname_name(val->name),
+			    val->view->resolver, dns_name(val->name),
 			    ds.algorithm, data, datalen))
 		{
 			if (val->unsupported_algorithm == 0) {
@@ -2576,7 +2572,7 @@ validate_dnskey_dsset(dns_validator_t *val) {
 	/*
 	 * Find the DNSKEY matching the DS...
 	 */
-	result = dns_dnssec_matchdskey(dns_linkedname_name(val->name), &dsrdata,
+	result = dns_dnssec_matchdskey(dns_name(val->name), &dsrdata,
 				       val->rdataset, &keyrdata);
 	if (result != ISC_R_SUCCESS) {
 		val->validation_attempts++;
@@ -2604,7 +2600,7 @@ validate_dnskey_dsset(dns_validator_t *val) {
 			     ds.algorithm == DNS_KEYALG_PRIVATEOID))
 	{
 		if (!dns_resolver_algorithm_supported(
-			    val->view->resolver, dns_linkedname_name(val->name),
+			    val->view->resolver, dns_name(val->name),
 			    key.algorithm, key.data, key.datalen))
 		{
 			if (val->unsupported_algorithm == 0) {
@@ -2736,8 +2732,7 @@ validate_dnskey(void *arg) {
 	 * a DS style trust anchor configured for this key.
 	 */
 	if (val->dsset == NULL) {
-		result = dns_keytable_find(val->keytable,
-					   dns_linkedname_name(val->name),
+		result = dns_keytable_find(val->keytable, dns_name(val->name),
 					   &keynode);
 		if (result == ISC_R_SUCCESS) {
 			if (dns_keynode_dsset(keynode, &val->fdsset)) {
@@ -2809,16 +2804,16 @@ validate_dnskey(void *arg) {
 		result = dns_rdata_tostruct(&dsrdata, &ds);
 		RUNTIME_CHECK(result == ISC_R_SUCCESS);

-		if (!dns_resolver_ds_digest_supported(
-			    val->view->resolver, dns_linkedname_name(val->name),
-			    ds.digest_type))
+		if (!dns_resolver_ds_digest_supported(val->view->resolver,
+						      dns_name(val->name),
+						      ds.digest_type))
 		{
 			continue;
 		}

-		if (!dns_resolver_algorithm_supported(
-			    val->view->resolver, dns_linkedname_name(val->name),
-			    ds.algorithm, NULL, 0))
+		if (!dns_resolver_algorithm_supported(val->view->resolver,
+						      dns_name(val->name),
+						      ds.algorithm, NULL, 0))
 		{
 			continue;
 		}
@@ -2873,8 +2868,7 @@ val_rdataset_first(dns_validator_t *val, dns_linkedname_t **namep,
 	} else {
 		result = dns_rdataset_first(val->rdataset);
 		if (result == ISC_R_SUCCESS) {
-			dns_ncache_current(val->rdataset,
-					   dns_linkedname_name(*namep),
+			dns_ncache_current(val->rdataset, dns_name(*namep),
 					   *rdatasetp);
 		}
 	}
@@ -2910,8 +2904,7 @@ val_rdataset_next(dns_validator_t *val, dns_linkedname_t **namep,
 		dns_rdataset_disassociate(*rdatasetp);
 		result = dns_rdataset_next(val->rdataset);
 		if (result == ISC_R_SUCCESS) {
-			dns_ncache_current(val->rdataset,
-					   dns_linkedname_name(*namep),
+			dns_ncache_current(val->rdataset, dns_name(*namep),
 					   *rdatasetp);
 		}
 	}
@@ -3380,16 +3373,15 @@ validate_ncache(dns_validator_t *val, bool resume) {

 		name = dns_fixedname_initlinkedname(&val->fname);
 		rdataset = &val->frdataset;
-		dns_ncache_current(val->rdataset, dns_linkedname_name(name),
-				   rdataset);
+		dns_ncache_current(val->rdataset, dns_name(name), rdataset);

 		if (val->frdataset.type == dns_rdatatype_rrsig) {
 			continue;
 		}

 		result = dns_ncache_getsigrdataset(
-			val->rdataset, dns_linkedname_name(name),
-			rdataset->type, &val->fsigrdataset);
+			val->rdataset, dns_name(name), rdataset->type,
+			&val->fsigrdataset);
 		if (result == ISC_R_SUCCESS) {
 			sigrdataset = &val->fsigrdataset;
 		}
@@ -3672,17 +3664,17 @@ seek_ds(dns_validator_t *val, isc_result_t *resp) {
 	dns_linkedname_t *tname = dns_fixedname_initlinkedname(&val->fname);

 	if (val->labels == dns_name_countlabels(val->name)) {
-		dns_name_copy(val->name, dns_linkedname_name(tname));
+		dns_name_copy(val->name, dns_name(tname));
 	} else {
-		dns_name_split(dns_linkedname_name(val->name), val->labels,
-			       NULL, dns_linkedname_name(tname));
+		dns_name_split(dns_name(val->name), val->labels, NULL,
+			       dns_name(tname));
 	}

 	dns_name_format(tname, namebuf, sizeof(namebuf));
 	validator_log(val, ISC_LOG_DEBUG(3), "checking existence of DS at '%s'",
 		      namebuf);

-	result = view_find(val, dns_linkedname_name(tname), dns_rdatatype_ds);
+	result = view_find(val, dns_name(tname), dns_rdatatype_ds);
 	switch (result) {
 	case ISC_R_SUCCESS:
 		/*
@@ -3699,8 +3691,7 @@ seek_ds(dns_validator_t *val, isc_result_t *resp) {
 						   &val->dsrdataset);
 				dssetp = &val->dsrdataset;
 				dns_rdataset_disassociate(&val->frdataset);
-				result = view_find(val,
-						   dns_linkedname_name(tname),
+				result = view_find(val, dns_name(tname),
 						   dns_rdatatype_dnskey);
 				switch (result) {
 				case ISC_R_SUCCESS:
@@ -3713,7 +3704,7 @@ seek_ds(dns_validator_t *val, isc_result_t *resp) {
 					 */
 					*resp = DNS_R_WAIT;
 					result = create_fetch(
-						val, dns_linkedname_name(tname),
+						val, dns_name(tname),
 						dns_rdatatype_dnskey, NULL,
 						NULL, fetch_callback_dnskey,
 						"seek_ds");
@@ -3729,8 +3720,8 @@ seek_ds(dns_validator_t *val, isc_result_t *resp) {
 					break;
 				}
 			}
-			if (!check_ds_algs(val, dns_linkedname_name(tname),
-					   dssetp, keysetp))
+			if (!check_ds_algs(val, dns_name(tname), dssetp,
+					   keysetp))
 			{
 				validator_log(
 					val, ISC_LOG_DEBUG(3),
@@ -3798,8 +3789,8 @@ seek_ds(dns_validator_t *val, isc_result_t *resp) {
 		 */
 		if (result == DNS_R_NXRRSET &&
 		    !dns_rdataset_isassociated(&val->frdataset) &&
-		    dns_view_bestzonecut(val->view, dns_linkedname_name(tname),
-					 found, NULL, 0, 0, false, false,
+		    dns_view_bestzonecut(val->view, dns_name(tname), found,
+					 NULL, 0, 0, false, false,
 					 NULL) == ISC_R_SUCCESS &&
 		    dns_name_equal(tname, found))
 		{
@@ -3823,8 +3814,7 @@ seek_ds(dns_validator_t *val, isc_result_t *resp) {

 		{
 			bool crossed = false;
-			if (is_insecure_referral(val,
-						 dns_linkedname_name(tname),
+			if (is_insecure_referral(val, dns_name(tname),
 						 &val->frdataset, result,
 						 "seek_ds", &crossed))
 			{
diff --git a/lib/dns/xfrin.c b/lib/dns/xfrin.c
index b918727962..9bcdf5fc43 100644
--- a/lib/dns/xfrin.c
+++ b/lib/dns/xfrin.c
@@ -1543,7 +1543,7 @@ tuple2msgname(dns_difftuple_t *tuple, dns_message_t *msg,
 	dns_rdatalist_tordataset(rdl, rds);

 	dns_message_gettempname(msg, &name);
-	dns_name_clone(&tuple->name, dns_linkedname_name(name));
+	dns_name_clone(&tuple->name, dns_name(name));
 	ISC_LIST_APPEND(name->list, rds, link);

 	*target = name;
@@ -1608,7 +1608,7 @@ xfrin_send_request(dns_xfrin_t *xfr) {

 	/* Create a name for the question section. */
 	dns_message_gettempname(msg, &qname);
-	dns_name_clone(&xfr->name, dns_linkedname_name(qname));
+	dns_name_clone(&xfr->name, dns_name(qname));

 	/* Formulate the question and attach it to the question name. */
 	dns_message_gettemprdataset(msg, &qrdataset);
@@ -1985,8 +1985,8 @@ xfrin_recv_done(isc_result_t result, isc_region_t *region, void *arg) {
 			DNS_RDATASET_FOREACH(rds) {
 				dns_rdata_t rdata = DNS_RDATA_INIT;
 				dns_rdataset_current(rds, &rdata);
-				CHECK(xfr_rr(xfr, dns_linkedname_name(name),
-					     rds->ttl, &rdata));
+				CHECK(xfr_rr(xfr, dns_name(name), rds->ttl,
+					     &rdata));

 				/*
 				 * Did we hit the maximum ixfr diffs limit?
diff --git a/lib/dns/zone.c b/lib/dns/zone.c
index 7d374235bd..3e2ccd9a53 100644
--- a/lib/dns/zone.c
+++ b/lib/dns/zone.c
@@ -11215,7 +11215,7 @@ create_query(dns_zone_t *zone, dns_rdatatype_t rdtype, dns_name_t *name,
 	/*
 	 * Make question.
 	 */
-	dns_name_clone(name, dns_linkedname_name(qname));
+	dns_name_clone(name, dns_name(qname));
 	dns_rdataset_makequestion(qrdataset, zone->rdclass, rdtype);
 	ISC_LIST_APPEND(qname->list, qrdataset, link);
 	dns_message_addname(message, qname, DNS_SECTION_QUESTION);
@@ -11667,7 +11667,7 @@ save_nsrrset(dns_message_t *message, dns_name_t *name,
 					       sizeof(*tmp_name));
 			dns_linkedname_init(tmp_name);
 			dns_name_dup(&ns.name, cb_args->stub->mctx,
-				     dns_linkedname_name(tmp_name));
+				     dns_name(tmp_name));
 			ISC_LIST_APPEND(ns_list, tmp_name, link);
 		}
 	}
@@ -11682,7 +11682,7 @@ save_nsrrset(dns_message_t *message, dns_name_t *name,
 			 * Resolve NS IPv4 address/A.
 			 */
 			result = stub_request_nameserver_address(
-				cb_args, true, dns_linkedname_name(ns_name));
+				cb_args, true, dns_name(ns_name));
 			if (result != ISC_R_SUCCESS) {
 				goto done;
 			}
@@ -11690,7 +11690,7 @@ save_nsrrset(dns_message_t *message, dns_name_t *name,
 			 * Resolve NS IPv6 address/AAAA.
 			 */
 			result = stub_request_nameserver_address(
-				cb_args, false, dns_linkedname_name(ns_name));
+				cb_args, false, dns_name(ns_name));
 			if (result != ISC_R_SUCCESS) {
 				goto done;
 			}
@@ -11702,8 +11702,7 @@ save_nsrrset(dns_message_t *message, dns_name_t *name,
 done:
 	ISC_LIST_FOREACH(ns_list, ns_name, link) {
 		ISC_LIST_UNLINK(ns_list, ns_name, link);
-		dns_name_free(dns_linkedname_name(ns_name),
-			      cb_args->stub->mctx);
+		dns_name_free(dns_name(ns_name), cb_args->stub->mctx);
 		isc_mem_put(cb_args->stub->mctx, ns_name, sizeof(*ns_name));
 	}
 	return result;
@@ -17341,8 +17340,8 @@ checkds_createmessage(dns_zone_t *zone, dns_message_t **messagep) {
 	/*
 	 * Make question.
 	 */
-	dns_name_init(dns_linkedname_name(tempname));
-	dns_name_clone(&zone->origin, dns_linkedname_name(tempname));
+	dns_name_init(dns_name(tempname));
+	dns_name_clone(&zone->origin, dns_name(tempname));
 	dns_rdataset_makequestion(temprdataset, zone->rdclass,
 				  dns_rdatatype_ds);
 	ISC_LIST_APPEND(tempname->list, temprdataset, link);
diff --git a/lib/ns/client.c b/lib/ns/client.c
index 1d41aec766..e4456c6c5a 100644
--- a/lib/ns/client.c
+++ b/lib/ns/client.c
@@ -1030,9 +1030,8 @@ ns_client_error(ns_client_t *client, isc_result_t result) {
 		result = isc_time_nowplusinterval(&expire, &i);
 		if (result == ISC_R_SUCCESS) {
 			dns_badcache_add(client->inner.view->failcache,
-					 dns_linkedname_name(qname),
-					 client->query.qtype, flags,
-					 isc_time_seconds(&expire));
+					 dns_name(qname), client->query.qtype,
+					 flags, isc_time_seconds(&expire));
 		}
 	}

@@ -2818,9 +2817,9 @@ ns_client_logv(ns_client_t *client, isc_logcategory_t category,
 		signer = signerbuf;
 	}

-	q = dns_linkedname_name(client->query.origqname);
+	q = dns_name(client->query.origqname);
 	if (q == NULL) {
-		q = dns_linkedname_name(client->query.qname);
+		q = dns_name(client->query.qname);
 	}
 	if (q != NULL) {
 		dns_name_format(q, qnamebuf, sizeof(qnamebuf));
@@ -3060,8 +3059,8 @@ ns_client_newname(ns_client_t *client, isc_buffer_t *dbuf, isc_buffer_t *nbuf) {
 	dns_message_gettempname(client->message, &name_links);
 	isc_buffer_availableregion(dbuf, &r);
 	isc_buffer_init(nbuf, r.base, r.length);
-	dns_name_setbuffer(dns_linkedname_name(name_links), NULL);
-	dns_name_setbuffer(dns_linkedname_name(name_links), nbuf);
+	dns_name_setbuffer(dns_name(name_links), NULL);
+	dns_name_setbuffer(dns_name(name_links), nbuf);
 	client->query.namebufused = true;

 	CTRACE("ns_client_newname: done");
@@ -3111,7 +3110,7 @@ ns_client_keepname(ns_client_t *client, dns_linkedname_t *name,

 	dns_name_toregion(name, &r);
 	isc_buffer_add(dbuf, r.length);
-	dns_name_setbuffer(dns_linkedname_name(name), NULL);
+	dns_name_setbuffer(dns_name(name), NULL);
 	client->query.namebufused = false;
 }

diff --git a/lib/ns/notify.c b/lib/ns/notify.c
index c18a85b08b..bd64dcf1f4 100644
--- a/lib/ns/notify.c
+++ b/lib/ns/notify.c
@@ -171,7 +171,7 @@ ns_notify_start(ns_client_t *client, isc_nmhandle_t *handle) {
 		goto done;
 	}
 	result = dns_view_findzone(client->inner.view,
-				   dns_linkedname_name(zonename),
+				   dns_name(zonename),
 				   DNS_ZTFIND_EXACT, &zone);
 	if (result == ISC_R_SUCCESS) {
 		dns_zonetype_t zonetype = dns_zone_gettype(zone);
diff --git a/lib/ns/query.c b/lib/ns/query.c
index 64c9aba253..935695224f 100644
--- a/lib/ns/query.c
+++ b/lib/ns/query.c
@@ -1779,9 +1779,8 @@ query_additional_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
 	/*
 	 * First, look for authoritative additional data.
 	 */
-	result = query_additionalauth(qctx, name, type, &db,
-				      dns_linkedname_name(fname), rdataset,
-				      sigrdataset);
+	result = query_additionalauth(qctx, name, type, &db, dns_name(fname),
+				      rdataset, sigrdataset);
 	if (result == ISC_R_SUCCESS) {
 		goto found;
 	}
@@ -1812,8 +1811,8 @@ query_additional_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
 	result = dns_db_findext(db, name, version, type,
 				client->query.dboptions | DNS_DBFIND_GLUEOK |
 					DNS_DBFIND_ADDITIONALOK,
-				client->inner.now, dns_linkedname_name(fname),
-				&cm, &ci, rdataset, sigrdataset);
+				client->inner.now, dns_name(fname), &cm, &ci,
+				rdataset, sigrdataset);

 	dns_cache_updatestats(qctx->view->cache, result);
 	if (!client->inner.wantdnssec) {
@@ -1866,8 +1865,8 @@ try_glue:
 	version = dbversion->version;
 	result = dns_db_findext(db, name, version, type,
 				client->query.dboptions | DNS_DBFIND_GLUEOK,
-				client->inner.now, dns_linkedname_name(fname),
-				&cm, &ci, rdataset, sigrdataset);
+				client->inner.now, dns_name(fname), &cm, &ci,
+				rdataset, sigrdataset);
 	if (result != ISC_R_SUCCESS && result != DNS_R_ZONECUT &&
 	    result != DNS_R_GLUE)
 	{
@@ -1880,8 +1879,8 @@ found:
 	 * at least a node to iterate over.
 	 */
 	foundname = dns_fixedname_initname(&foundfixed);
-	dns_name_copy(dns_linkedname_name(fname), foundname);
-	query_fix_wildcardname(name, dns_linkedname_name(fname));
+	dns_name_copy(dns_name(fname), foundname);
+	query_fix_wildcardname(name, dns_name(fname));
 	ns_client_keepname(client, fname, dbuf);

 	/*
@@ -1897,8 +1896,7 @@ found:
 	 */
 	mname = NULL;
 	if (dns_rdataset_isassociated(rdataset) &&
-	    !query_isduplicate(client, dns_linkedname_name(fname), type,
-			       &mname))
+	    !query_isduplicate(client, dns_name(fname), type, &mname))
 	{
 		if (mname != NULL) {
 			INSIST(mname != fname);
@@ -1944,8 +1942,8 @@ found:
 		} else if (client->inner.wantdnssec) {
 			sigrdataset = ns_client_newrdataset(client);
 		}
-		if (query_isduplicate(client, dns_linkedname_name(fname),
-				      dns_rdatatype_a, NULL))
+		if (query_isduplicate(client, dns_name(fname), dns_rdatatype_a,
+				      NULL))
 		{
 			goto aaaa_lookup;
 		}
@@ -1962,9 +1960,8 @@ found:
 			if (DNS_TRUST_PENDING(rdataset->trust)) {
 				dns_rdataset_cleanup(rdataset);
 				dns_rdataset_cleanup(sigrdataset);
-			} else if (!query_isduplicate(
-					   client, dns_linkedname_name(fname),
-					   dns_rdatatype_a, &mname))
+			} else if (!query_isduplicate(client, dns_name(fname),
+						      dns_rdatatype_a, &mname))
 			{
 				if (mname != fname) {
 					if (mname != NULL) {
@@ -1992,7 +1989,7 @@ found:
 			}
 		}
 	aaaa_lookup:
-		if (query_isduplicate(client, dns_linkedname_name(fname),
+		if (query_isduplicate(client, dns_name(fname),
 				      dns_rdatatype_aaaa, NULL))
 		{
 			goto addname;
@@ -2011,9 +2008,9 @@ found:
 			if (DNS_TRUST_PENDING(rdataset->trust)) {
 				dns_rdataset_cleanup(rdataset);
 				dns_rdataset_cleanup(sigrdataset);
-			} else if (!query_isduplicate(
-					   client, dns_linkedname_name(fname),
-					   dns_rdatatype_aaaa, &mname))
+			} else if (!query_isduplicate(client, dns_name(fname),
+						      dns_rdatatype_aaaa,
+						      &mname))
 			{
 				if (mname != fname) {
 					if (mname != NULL) {
@@ -2067,9 +2064,8 @@ addname:
 		    client->inner.view->max_restarts)
 		{
 			eresult = dns_rdataset_additionaldata(
-				trdataset, dns_linkedname_name(fname),
-				query_additional_cb, qctx,
-				DNS_RDATASET_MAXADDITIONAL);
+				trdataset, dns_name(fname), query_additional_cb,
+				qctx, DNS_RDATASET_MAXADDITIONAL);
 		}
 		client->inner.additionaldepth--;
 	}
@@ -2221,9 +2217,9 @@ query_add_to_message(query_ctx_t *qctx, dns_linkedname_t **namep,
 	 * stored in 'dbuf'. In this case, query_add_to_message() guarantees
 	 * that when it returns the name will either have been kept or released.
 	 */
-	result = dns_message_findname(client->message, section,
-				      dns_linkedname_name(name), rdataset->type,
-				      rdataset->covers, &mname, &mrdataset);
+	result = dns_message_findname(client->message, section, dns_name(name),
+				      rdataset->type, rdataset->covers, &mname,
+				      &mrdataset);
 	if (result == ISC_R_SUCCESS) {
 		/*
 		 * We've already got an RRset of the given name and type.
@@ -2266,7 +2262,7 @@ query_add_to_message(query_ctx_t *qctx, dns_linkedname_t **namep,
 	 * Update message name and set rdataset order.
 	 */
 	query_addtoname(mname, rdataset);
-	query_setorder(qctx, dns_linkedname_name(mname), rdataset);
+	query_setorder(qctx, dns_name(mname), rdataset);

 	/*
 	 * Note: we only add SIGs if we've added the type they cover, so
@@ -2302,7 +2298,7 @@ query_addrrset(query_ctx_t *qctx, dns_linkedname_t **namep,
 		return;
 	}

-	query_additional(qctx, dns_linkedname_name(mname), rdataset);
+	query_additional(qctx, dns_name(mname), rdataset);

 	CCTRACE(ISC_LOG_DEBUG(3), "query_addrrset: done");
 }
@@ -2331,8 +2327,8 @@ query_zone_delegation_rrset(query_ctx_t *qctx, dns_linkedname_t **namep,

 	dns_clientinfomethods_init(&cm, ns_client_sourceip);
 	dns_clientinfo_init(&ci, client, NULL);
-	dns_db_addglue(qctx->db, qctx->version, dns_linkedname_name(mname),
-		       rdataset, client->message, &cm, &ci);
+	dns_db_addglue(qctx->db, qctx->version, dns_name(mname), rdataset,
+		       client->message, &cm, &ci);

 	CTRACE(ISC_LOG_DEBUG(3), "query_zone_delegation_rrset: done");
 }
@@ -2499,7 +2495,7 @@ stale_refresh_aftermath(ns_client_t *client, isc_result_t result) {
 		(void)dns_db_findext(db, qctx.client->query.qname, NULL,
 				     qctx.client->query.qtype, dboptions,
 				     qctx.client->inner.now,
-				     dns_linkedname_name(qctx.fname), &cm, &ci,
+				     dns_name(qctx.fname), &cm, &ci,
 				     qctx.rdataset, qctx.sigrdataset);
 		dns_db_detach(&db);

@@ -2669,9 +2665,9 @@ query_stale_refresh_ncache(ns_client_t *client, dns_rdataset_t *rdataset) {
 	dns_name_t *qname;

 	if (client->query.origqname != NULL) {
-		qname = dns_linkedname_name(client->query.origqname);
+		qname = dns_name(client->query.origqname);
 	} else {
-		qname = dns_linkedname_name(client->query.qname);
+		qname = dns_name(client->query.qname);
 	}
 	query_stale_refresh(client, qname, rdataset);
 }
@@ -3916,8 +3912,7 @@ rpz_rewrite(ns_client_t *client, dns_rdatatype_t qtype, isc_result_t qresult,
 		 */
 		if ((st->state & DNS_RPZ_DONE_QNAME) == 0) {
 			CHECK(rpz_rewrite_name(
-				client,
-				dns_linkedname_name(client->query.qname), qtype,
+				client, dns_name(client->query.qname), qtype,
 				DNS_RPZ_TYPE_QNAME, allowed, &rdataset));

 			/*
@@ -3964,7 +3959,7 @@ rpz_rewrite(ns_client_t *client, dns_rdatatype_t qtype, isc_result_t qresult,
 	    rpz_get_zbits(client, qtype, DNS_RPZ_TYPE_IP) != 0)
 	{
 		CHECK(rpz_rewrite_ip_rrsets(
-			client, dns_linkedname_name(client->query.qname), qtype,
+			client, dns_name(client->query.qname), qtype,
 			DNS_RPZ_TYPE_IP, &rdataset, resuming));
 		/*
 		 * We are finished checking the IP addresses for the qname.
@@ -3995,10 +3990,10 @@ rpz_rewrite(ns_client_t *client, dns_rdatatype_t qtype, isc_result_t qresult,
 		 * Get NS rrset for each domain in the current qname.
 		 */
 		if (st->r.label == dns_name_countlabels(client->query.qname)) {
-			nsname = dns_linkedname_name(client->query.qname);
+			nsname = dns_name(client->query.qname);
 		} else {
 			nsname = dns_fixedname_name(&nsnamef);
-			dns_name_split(dns_linkedname_name(client->query.qname),
+			dns_name_split(dns_name(client->query.qname),
 				       st->r.label, NULL, nsname);
 		}
 		if (st->r.ns_rdataset == NULL ||
@@ -4513,7 +4508,7 @@ redirect(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset,
 	{
 		dns_name_copy(found, dns_fixedname_name(foundname));
 	}
-	query_fix_wildcardname(dns_linkedname_name(client->query.qname), found);
+	query_fix_wildcardname(dns_name(client->query.qname), found);
 	if (result == DNS_R_NXRRSET || result == DNS_R_NCACHENXRRSET) {
 		dns_rdataset_cleanup(rdataset);
 		dns_rdataset_cleanup(&trdataset);
@@ -4615,9 +4610,8 @@ redirect2(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset,
 		dns_name_t prefix;

 		dns_name_init(&prefix);
-		dns_name_getlabelsequence(
-			dns_linkedname_name(client->query.qname), 0, labels - 1,
-			&prefix);
+		dns_name_getlabelsequence(dns_name(client->query.qname), 0,
+					  labels - 1, &prefix);
 		result = dns_name_concatenate(&prefix,
 					      client->inner.view->redirectzone,
 					      redirectname);
@@ -5015,8 +5009,7 @@ get_root_key_sentinel_id(query_ctx_t *qctx, const char *ndata) {
  */
 static void
 root_key_sentinel_detect(query_ctx_t *qctx) {
-	const dns_name_t *qname =
-		dns_linkedname_name(qctx->client->query.qname);
+	const dns_name_t *qname = dns_name(qctx->client->query.qname);
 	const char *ndata = (const char *)qname->ndata;
 	const char *keyid = NULL;

@@ -5181,9 +5174,9 @@ ns__query_start(query_ctx_t *qctx) {
 	}

 	if (qctx->view->checknames &&
-	    !dns_rdata_checkowner(
-		    dns_linkedname_name(qctx->client->query.qname),
-		    qctx->client->message->rdclass, qctx->qtype, false))
+	    !dns_rdata_checkowner(dns_name(qctx->client->query.qname),
+				  qctx->client->message->rdclass, qctx->qtype,
+				  false))
 	{
 		char namebuf[DNS_NAME_FORMATSIZE];
 		char typebuf[DNS_RDATATYPE_FORMATSIZE];
@@ -5219,7 +5212,7 @@ ns__query_start(query_ctx_t *qctx) {
 	 */
 	qctx->options = (dns_getdb_options_t){ .nolog = qctx->options.nolog };
 	if (dns_rdatatype_atparent(qctx->qtype) &&
-	    !dns_name_isroot(dns_linkedname_name(qctx->client->query.qname)))
+	    !dns_name_isroot(dns_name(qctx->client->query.qname)))
 	{
 		/*
 		 * If authoritative data for this QTYPE is supposed to live in
@@ -5230,8 +5223,7 @@ ns__query_start(query_ctx_t *qctx) {
 		qctx->options.noexact = true;
 	}

-	result = query_getdb(qctx->client,
-			     dns_linkedname_name(qctx->client->query.qname),
+	result = query_getdb(qctx->client, dns_name(qctx->client->query.qname),
 			     qctx->qtype, qctx->options, &qctx->zone, &qctx->db,
 			     &qctx->version, &qctx->is_zone);
 	if ((result != ISC_R_SUCCESS || !qctx->is_zone) &&
@@ -5251,8 +5243,7 @@ ns__query_start(query_ctx_t *qctx) {

 		dns_getdb_options_t options = { .partial = true };
 		tresult = query_getzonedb(
-			qctx->client,
-			dns_linkedname_name(qctx->client->query.qname),
+			qctx->client, dns_name(qctx->client->query.qname),
 			qctx->qtype, options, &tzone, &tdb, &tversion);
 		if (tresult == ISC_R_SUCCESS) {
 			/*
@@ -5585,7 +5576,7 @@ query_lookup(query_ctx_t *qctx) {
 	if (qctx->dns64 && qctx->rpz) {
 		rpzqname = qctx->client->query.rpz_st->p_name;
 	} else {
-		rpzqname = dns_linkedname_name(qctx->client->query.qname);
+		rpzqname = dns_name(qctx->client->query.qname);
 	}

 	qctx->client->query.dboptions &= ~DNS_DBFIND_STALETIMEOUT;
@@ -5630,19 +5621,18 @@ query_lookup(query_ctx_t *qctx) {
 	 * node resolution, such as ANY/RRSIG iteration.
 	 */
 	if (qctx->dns64 && qctx->rpz) {
-		dns_name_copy(qctx->client->query.qname,
-			      dns_linkedname_name(qctx->fname));
-		dns_linkedname_name(qctx->fname)->attributes.wildcard = false;
+		dns_name_copy(qctx->client->query.qname, dns_name(qctx->fname));
+		dns_linkedname_attrs(qctx->fname)->wildcard = false;
 		dns_rdataset_cleanup(qctx->sigrdataset);
 	} else if (found_via_wildcard) {
-		dns_name_copy(rpzqname, dns_linkedname_name(qctx->fname));
-		dns_linkedname_name(qctx->fname)->attributes.wildcard = true;
+		dns_name_copy(rpzqname, dns_name(qctx->fname));
+		dns_linkedname_attrs(qctx->fname)->wildcard = true;
 	} else if (qctx_has_foundname(qctx)) {
-		dns_name_copy(foundname, dns_linkedname_name(qctx->fname));
-		dns_linkedname_name(qctx->fname)->attributes.wildcard = false;
+		dns_name_copy(foundname, dns_name(qctx->fname));
+		dns_linkedname_attrs(qctx->fname)->wildcard = false;
 	} else {
-		dns_name_copy(rpzqname, dns_linkedname_name(qctx->fname));
-		dns_linkedname_name(qctx->fname)->attributes.wildcard = false;
+		dns_name_copy(rpzqname, dns_name(qctx->fname));
+		dns_linkedname_attrs(qctx->fname)->wildcard = false;
 	}

 	if (!qctx->is_zone) {
@@ -6220,7 +6210,7 @@ query_resume(query_ctx_t *qctx) {
 		tname = qctx->fresp->foundname;
 	}

-	dns_name_copy(tname, dns_linkedname_name(qctx->fname));
+	dns_name_copy(tname, dns_name(qctx->fname));

 	if (rpz) {
 		qctx->rpz_st->r.r_result = qctx->fresp->result;
@@ -6468,9 +6458,8 @@ ns__query_sfcache(query_ctx_t *qctx) {
 	{
 		failcache = dns_badcache_find(
 			qctx->view->failcache,
-			dns_linkedname_name(qctx->client->query.qname),
-			qctx->qtype, &flags,
-			isc_time_seconds(&qctx->client->inner.tnow));
+			dns_name(qctx->client->query.qname), qctx->qtype,
+			&flags, isc_time_seconds(&qctx->client->inner.tnow));
 	}

 	if (failcache != ISC_R_SUCCESS) {
@@ -6582,7 +6571,7 @@ query_checkrrl(query_ctx_t *qctx, isc_result_t result) {
 		qctx->client->query.rrl_checked = true;

 		wouldlog = isc_log_wouldlog(DNS_RRL_LOG_DROP);
-		constname = dns_linkedname_name(qctx->fname);
+		constname = dns_name(qctx->fname);
 		if (result == DNS_R_NXDOMAIN) {
 			/*
 			 * Use the database origin name to rate limit NXDOMAIN
@@ -6772,8 +6761,7 @@ query_checkrpz(query_ctx_t *qctx, isc_result_t result) {
 		 * we looked up even if we were stopped short
 		 * in recursion or for a deferral.
 		 */
-		dns_name_copy(qctx->client->query.qname,
-			      dns_linkedname_name(qctx->fname));
+		dns_name_copy(qctx->client->query.qname, dns_name(qctx->fname));
 		rpz_clean(&qctx->zone, &qctx->db, NULL);
 		dns_fixedname_init(&qctx->foundname);
 		if (qctx->rpz_st->m.rdataset != NULL) {
@@ -6944,14 +6932,14 @@ query_rpzcname(query_ctx_t *qctx, dns_name_t *cname) {
 	labels = dns_name_countlabels(cname);
 	if (labels > 2 && dns_name_iswildcard(cname)) {
 		dns_fixedname_init(&prefix);
-		dns_name_split(dns_linkedname_name(client->query.qname), 1,
+		dns_name_split(dns_name(client->query.qname), 1,
 			       dns_fixedname_name(&prefix), NULL);
 		dns_fixedname_init(&suffix);
 		dns_name_split(cname, labels - 1, NULL,
 			       dns_fixedname_name(&suffix));
 		result = dns_name_concatenate(dns_fixedname_name(&prefix),
 					      dns_fixedname_name(&suffix),
-					      dns_linkedname_name(qctx->fname));
+					      dns_name(qctx->fname));
 		if (result == DNS_R_NAMETOOLONG) {
 			client->message->rcode = dns_rcode_yxdomain;
 		}
@@ -6959,7 +6947,7 @@ query_rpzcname(query_ctx_t *qctx, dns_name_t *cname) {
 			return result;
 		}
 	} else {
-		dns_name_copy(cname, dns_linkedname_name(qctx->fname));
+		dns_name_copy(cname, dns_name(qctx->fname));
 	}

 	ns_client_keepname(client, qctx->fname, qctx->dbuf);
@@ -6967,7 +6955,7 @@ query_rpzcname(query_ctx_t *qctx, dns_name_t *cname) {

 	rpz_log_rewrite(client, false, qctx->rpz_st->m.policy,
 			qctx->rpz_st->m.type, qctx->rpz_st->m.zone,
-			qctx->rpz_st->p_name, dns_linkedname_name(qctx->fname),
+			qctx->rpz_st->p_name, dns_name(qctx->fname),
 			qctx->rpz_st->m.rpz->num);

 	ns_client_qnamereplace(client, qctx->fname);
@@ -7107,7 +7095,7 @@ query_usestale(query_ctx_t *qctx) {

 	if (dns_view_staleanswerenabled(qctx->client->inner.view)) {
 		if (query_getdb(qctx->client,
-				dns_linkedname_name(qctx->client->query.qname),
+				dns_name(qctx->client->query.qname),
 				qctx->client->query.qtype, qctx->options,
 				&qctx->zone, &qctx->db, &qctx->version,
 				&qctx->is_zone) != ISC_R_SUCCESS)
@@ -7156,7 +7144,7 @@ query_gotanswer(query_ctx_t *qctx, isc_result_t result) {
 		return ns_query_done(qctx);
 	}

-	if (!dns_name_isroot(dns_linkedname_name(qctx->client->query.qname))) {
+	if (!dns_name_isroot(dns_name(qctx->client->query.qname))) {
 		result = query_checkrpz(qctx, result);
 		if (result == ISC_R_NOTFOUND) {
 			/*
@@ -7289,9 +7277,8 @@ query_addnoqnameproof(query_ctx_t *qctx) {
 	neg = ns_client_newrdataset(client);
 	negsig = ns_client_newrdataset(client);

-	RUNTIME_CHECK(dns_rdataset_getnoqname(qctx->noqname,
-					      dns_linkedname_name(fname), neg,
-					      negsig) == ISC_R_SUCCESS);
+	RUNTIME_CHECK(dns_rdataset_getnoqname(qctx->noqname, dns_name(fname),
+					      neg, negsig) == ISC_R_SUCCESS);

 	query_addrrset(qctx, &fname, &neg, &negsig, dbuf,
 		       DNS_SECTION_AUTHORITY);
@@ -7311,11 +7298,11 @@ query_savewildcardproof(query_ctx_t *qctx, dns_fixedname_t *fixed) {
 	dns_name_t *name = NULL;

 	if (qctx->client->inner.wantdnssec && qctx->fname != NULL &&
-	    dns_linkedname_name(qctx->fname)->attributes.wildcard)
+	    dns_linkedname_attrs(qctx->fname)->wildcard)
 	{
 		dns_fixedname_init(fixed);
 		name = dns_fixedname_name(fixed);
-		dns_name_copy(dns_linkedname_name(qctx->fname), name);
+		dns_name_copy(dns_name(qctx->fname), name);
 	}

 	return name;
@@ -7458,9 +7445,9 @@ query_respond_any(query_ctx_t *qctx) {

 			if (!qctx->is_zone && qctx->client->query.recursionok) {
 				dns_name_t *name;
-				name = dns_linkedname_name(qctx->fname);
+				name = dns_name(qctx->fname);
 				if (name == NULL) {
-					name = dns_linkedname_name(qctx->tname);
+					name = dns_name(qctx->tname);
 				}
 				query_prefetch(qctx->client, name,
 					       qctx->rdataset);
@@ -7722,8 +7709,7 @@ query_addanswer(query_ctx_t *qctx) {
 		qctx->client->query.dns64_aaaaoklen = 0;
 	} else {
 		if (!qctx->is_zone && qctx->client->query.recursionok) {
-			query_prefetch(qctx->client,
-				       dns_linkedname_name(qctx->fname),
+			query_prefetch(qctx->client, dns_name(qctx->fname),
 				       qctx->rdataset);
 		}
 		if (qctx->client->inner.wantdnssec && qctx->sigrdataset != NULL)
@@ -7816,9 +7802,7 @@ query_respond(query_ctx_t *qctx) {
 		 * Always add glue for root priming queries, regardless
 		 * of "minimal-responses" setting.
 		 */
-		if (dns_name_isroot(
-			    dns_linkedname_name(qctx->client->query.qname)))
-		{
+		if (dns_name_isroot(dns_name(qctx->client->query.qname))) {
 			qctx->client->query.noadditional = false;
 			dns_db_attach(qctx->db, &qctx->client->query.gluedb);
 		}
@@ -7890,8 +7874,8 @@ query_dns64(query_ctx_t *qctx) {

 	name = qctx->fname;
 	result = dns_message_findname(
-		client->message, section, dns_linkedname_name(name),
-		dns_rdatatype_aaaa, qctx->rdataset->covers, &mname, &mrdataset);
+		client->message, section, dns_name(name), dns_rdatatype_aaaa,
+		qctx->rdataset->covers, &mname, &mrdataset);
 	if (result == ISC_R_SUCCESS) {
 		/*
 		 * We've already got an RRset of the given name and type.
@@ -7944,7 +7928,7 @@ query_dns64(query_ctx_t *qctx) {
 			      client->inner.signer, flags, qctx->rdataset,
 			      &dns64_rdataset));

-	dns_rdataset_setownercase(dns64_rdataset, dns_linkedname_name(mname));
+	dns_rdataset_setownercase(dns64_rdataset, dns_name(mname));
 	client->query.noadditional = true;

 	if (client->query.dns64_ttl != UINT32_MAX) {
@@ -7955,7 +7939,7 @@ query_dns64(query_ctx_t *qctx) {
 	}

 	query_addtoname(mname, dns64_rdataset);
-	query_setorder(qctx, dns_linkedname_name(mname), dns64_rdataset);
+	query_setorder(qctx, dns_name(mname), dns64_rdataset);

 	inc_stats(client, ns_statscounter_dns64);
 	result = ISC_R_SUCCESS;
@@ -7985,9 +7969,8 @@ query_filter64(query_ctx_t *qctx) {

 	name = qctx->fname;
 	result = dns_message_findname(
-		client->message, section, dns_linkedname_name(name),
-		dns_rdatatype_aaaa, qctx->rdataset->covers, &mname,
-		&myrdataset);
+		client->message, section, dns_name(name), dns_rdatatype_aaaa,
+		qctx->rdataset->covers, &mname, &myrdataset);
 	if (result == ISC_R_SUCCESS) {
 		/*
 		 * We've already got an RRset of the given name and type.
@@ -8044,7 +8027,7 @@ query_filter64(query_ctx_t *qctx) {
 	}

 	dns_rdatalist_tordataset(myrdatalist, myrdataset);
-	dns_rdataset_setownercase(myrdataset, dns_linkedname_name(mname));
+	dns_rdataset_setownercase(myrdataset, dns_name(mname));
 	client->query.noadditional = true;
 	if (mname == name) {
 		if (qctx->dbuf != NULL) {
@@ -8056,7 +8039,7 @@ query_filter64(query_ctx_t *qctx) {
 	myrdataset->trust = qctx->rdataset->trust;

 	query_addtoname(mname, myrdataset);
-	query_setorder(qctx, dns_linkedname_name(mname), myrdataset);
+	query_setorder(qctx, dns_name(mname), myrdataset);

 	dns_message_takebuffer(client->message, &buffer);
 	if (buffer != NULL) {
@@ -8203,8 +8186,7 @@ query_prepare_zone_delegation_response(query_ctx_t *qctx) {
 	 * save a copy of it here in case we need it.
 	 */
 	dns_fixedname_init(&qctx->dsname);
-	dns_name_copy(dns_linkedname_name(qctx->fname),
-		      dns_fixedname_name(&qctx->dsname));
+	dns_name_copy(dns_name(qctx->fname), dns_fixedname_name(&qctx->dsname));

 	/*
 	 * This is the best answer.
@@ -8260,8 +8242,7 @@ query_zone_delegation(query_ctx_t *qctx) {
 		dns_dbversion_t *tversion = NULL;
 		dns_getdb_options_t options = { .partial = true };
 		result = query_getzonedb(
-			qctx->client,
-			dns_linkedname_name(qctx->client->query.qname),
+			qctx->client, dns_name(qctx->client->query.qname),
 			qctx->qtype, options, &tzone, &tdb, &tversion);
 		if (result != ISC_R_SUCCESS) {
 			if (tdb != NULL) {
@@ -8387,7 +8368,7 @@ use_zone_delegation(query_ctx_t *qctx) {
 static isc_result_t
 query_delegation_recurse(query_ctx_t *qctx) {
 	isc_result_t result = ISC_R_UNSET;
-	dns_name_t *qname = dns_linkedname_name(qctx->client->query.qname);
+	dns_name_t *qname = dns_name(qctx->client->query.qname);

 	CCTRACE(ISC_LOG_DEBUG(3), "query_delegation_recurse");

@@ -8546,7 +8527,7 @@ addnsec3:
 	dns_rdataset_cleanup(rdataset);
 	dns_rdataset_cleanup(sigrdataset);
 	query_findclosestnsec3(name, qctx->db, qctx->version, client, rdataset,
-			       sigrdataset, dns_linkedname_name(fname), true,
+			       sigrdataset, dns_name(fname), true,
 			       dns_fixedname_name(&fixed));
 	if (!dns_rdataset_isassociated(rdataset)) {
 		goto cleanup;
@@ -8570,8 +8551,8 @@ addnsec3:
 		}
 		query_findclosestnsec3(dns_fixedname_name(&fixed), qctx->db,
 				       qctx->version, client, rdataset,
-				       sigrdataset, dns_linkedname_name(fname),
-				       false, NULL);
+				       sigrdataset, dns_name(fname), false,
+				       NULL);
 		if (!dns_rdataset_isassociated(rdataset)) {
 			goto cleanup;
 		}
@@ -8626,8 +8607,7 @@ query_nodata(query_ctx_t *qctx, isc_result_t res) {
 			qctx->fname = ns_client_newname(qctx->client,
 							qctx->dbuf, &b);
 		}
-		dns_name_copy(qctx->client->query.qname,
-			      dns_linkedname_name(qctx->fname));
+		dns_name_copy(qctx->client->query.qname, dns_name(qctx->fname));
 		qctx->dns64 = false;
 #ifdef dns64_bis_return_excluded_addresses
 		/*
@@ -8731,12 +8711,12 @@ query_sign_nodata(query_ctx_t *qctx) {
 			isc_buffer_t b;

 			found = dns_fixedname_initname(&fixed);
-			qname = dns_linkedname_name(qctx->client->query.qname);
+			qname = dns_name(qctx->client->query.qname);

 			query_findclosestnsec3(
 				qname, qctx->db, qctx->version, qctx->client,
 				qctx->rdataset, qctx->sigrdataset,
-				dns_linkedname_name(qctx->fname), true, found);
+				dns_name(qctx->fname), true, found);
 			/*
 			 * Did we find the closest provable encloser
 			 * instead? If so add the nearest to the
@@ -8781,14 +8761,12 @@ query_sign_nodata(query_ctx_t *qctx) {
 					found, qctx->db, qctx->version,
 					qctx->client, qctx->rdataset,
 					qctx->sigrdataset,
-					dns_linkedname_name(qctx->fname), false,
-					NULL);
+					dns_name(qctx->fname), false, NULL);
 			}
 		} else {
 			ns_client_releasename(qctx->client, &qctx->fname);
 			query_addwildcardproof(
-				qctx,
-				dns_linkedname_name(qctx->client->query.qname),
+				qctx, dns_name(qctx->client->query.qname),
 				false, true);
 		}
 	}
@@ -8870,9 +8848,8 @@ query_addnxrrsetnsec(query_ctx_t *qctx) {
 		return;
 	}

-	query_addwildcardproof(qctx,
-			       dns_linkedname_name(qctx->client->query.qname),
-			       true, false);
+	query_addwildcardproof(qctx, dns_name(qctx->client->query.qname), true,
+			       false);

 	/*
 	 * We'll need some resources...
@@ -8880,12 +8857,11 @@ query_addnxrrsetnsec(query_ctx_t *qctx) {
 	dbuf = ns_client_getnamebuf(client);
 	fname = ns_client_newname(client, dbuf, &b);

-	dns_name_split(dns_linkedname_name(qctx->fname), sig.labels + 1, NULL,
-		       dns_linkedname_name(fname));
+	dns_name_split(dns_name(qctx->fname), sig.labels + 1, NULL,
+		       dns_name(fname));
 	/* This will succeed, since we've stripped labels. */
-	RUNTIME_CHECK(dns_name_concatenate(
-			      dns_wildcardname, dns_linkedname_name(fname),
-			      dns_linkedname_name(fname)) == ISC_R_SUCCESS);
+	RUNTIME_CHECK(dns_name_concatenate(dns_wildcardname, dns_name(fname),
+					   dns_name(fname)) == ISC_R_SUCCESS);
 	query_addrrset(qctx, &fname, &qctx->rdataset, &qctx->sigrdataset, dbuf,
 		       DNS_SECTION_AUTHORITY);
 }
@@ -8962,9 +8938,9 @@ query_nxdomain(query_ctx_t *qctx, isc_result_t result) {
 				       &qctx->sigrdataset, NULL,
 				       DNS_SECTION_AUTHORITY);
 		}
-		query_addwildcardproof(
-			qctx, dns_linkedname_name(qctx->client->query.qname),
-			false, false);
+		query_addwildcardproof(qctx,
+				       dns_name(qctx->client->query.qname),
+				       false, false);
 	}

 	/*
@@ -9006,9 +8982,9 @@ query_redirect(query_ctx_t *qctx, isc_result_t saved_result) {
 	/* reset foundname */
 	(void)dns_fixedname_init(&qctx->foundname);

-	result = redirect(qctx->client, dns_linkedname_name(qctx->fname),
-			  qctx->rdataset, &qctx->foundname, &qctx->db,
-			  &qctx->version, qctx->type);
+	result = redirect(qctx->client, dns_name(qctx->fname), qctx->rdataset,
+			  &qctx->foundname, &qctx->db, &qctx->version,
+			  qctx->type);
 	switch (result) {
 	case ISC_R_SUCCESS:
 		inc_stats(qctx->client, ns_statscounter_nxdomainredirect);
@@ -9025,9 +9001,9 @@ query_redirect(query_ctx_t *qctx, isc_result_t saved_result) {
 		break;
 	}

-	result = redirect2(qctx->client, dns_linkedname_name(qctx->fname),
-			   qctx->rdataset, &qctx->foundname, &qctx->db,
-			   &qctx->version, qctx->type, &qctx->is_zone);
+	result = redirect2(qctx->client, dns_name(qctx->fname), qctx->rdataset,
+			   &qctx->foundname, &qctx->db, &qctx->version,
+			   qctx->type, &qctx->is_zone);
 	switch (result) {
 	case ISC_R_SUCCESS:
 		inc_stats(qctx->client, ns_statscounter_nxdomainredirect);
@@ -9144,7 +9120,7 @@ query_synthnodata(query_ctx_t *qctx, const dns_name_t *signer,

 	dbuf = ns_client_getnamebuf(qctx->client);
 	name = ns_client_newname(qctx->client, dbuf, &b);
-	dns_name_copy(signer, dns_linkedname_name(name));
+	dns_name_copy(signer, dns_name(name));

 	/*
 	 * Add SOA record. Omit the RRSIG if DNSSEC was not requested.
@@ -9197,7 +9173,7 @@ query_synthwildcard(query_ctx_t *qctx, dns_rdataset_t *rdataset,

 	dbuf = ns_client_getnamebuf(qctx->client);
 	name = ns_client_newname(qctx->client, dbuf, &b);
-	dns_name_copy(qctx->client->query.qname, dns_linkedname_name(name));
+	dns_name_copy(qctx->client->query.qname, dns_name(name));

 	cloneset = ns_client_newrdataset(qctx->client);
 	dns_rdataset_clone(rdataset, cloneset);
@@ -9277,7 +9253,7 @@ query_synthcnamewildcard(query_ctx_t *qctx, dns_rdataset_t *rdataset,
 		return ISC_R_SUCCESS;
 	}

-	dns_name_copy(&cname.cname, dns_linkedname_name(tname));
+	dns_name_copy(&cname.cname, dns_name(tname));

 	ns_client_qnamereplace(qctx->client, tname);
 	qctx->want_restart = true;
@@ -9328,7 +9304,7 @@ query_synthnxdomainnodata(query_ctx_t *qctx, bool nodata, dns_name_t *nowild,

 	dbuf = ns_client_getnamebuf(qctx->client);
 	name = ns_client_newname(qctx->client, dbuf, &b);
-	dns_name_copy(signer, dns_linkedname_name(name));
+	dns_name_copy(signer, dns_name(name));

 	/*
 	 * Add SOA record. Omit the RRSIG if DNSSEC was not requested.
@@ -9348,7 +9324,7 @@ query_synthnxdomainnodata(query_ctx_t *qctx, bool nodata, dns_name_t *nowild,

 		dbuf = ns_client_getnamebuf(qctx->client);
 		name = ns_client_newname(qctx->client, dbuf, &b);
-		dns_name_copy(nowild, dns_linkedname_name(name));
+		dns_name_copy(nowild, dns_name(name));

 		cloneset = ns_client_newrdataset(qctx->client);
 		clonesigset = ns_client_newrdataset(qctx->client);
@@ -9496,8 +9472,7 @@ query_coveringnsec(query_ctx_t *qctx) {
 	/*
 	 * The query name can't be above the signer of the NSEC.
 	 */
-	if (!dns_name_issubdomain(
-		    dns_linkedname_name(qctx->client->query.qname), signer))
+	if (!dns_name_issubdomain(dns_name(qctx->client->query.qname), signer))
 	{
 		goto cleanup;
 	}
@@ -9514,9 +9489,9 @@ query_coveringnsec(query_ctx_t *qctx) {
 	 * Check that we have the correct NOQNAME NSEC record.
 	 */
 	CHECK(dns_nsec_noexistnodata(
-		qctx->qtype, dns_linkedname_name(qctx->client->query.qname),
-		dns_linkedname_name(qctx->fname), qctx->rdataset, &exists,
-		&data, wild, log_noexistnodata, qctx));
+		qctx->qtype, dns_name(qctx->client->query.qname),
+		dns_name(qctx->fname), qctx->rdataset, &exists, &data, wild,
+		log_noexistnodata, qctx));
 	if (exists) {
 		/*
 		 * If there's data at the name, or the NSEC isn't
@@ -9783,9 +9758,9 @@ query_zerottl_refetch(query_ctx_t *qctx) {

 	INSIST(!qctx->client->query.is_redirect);

-	result = ns_query_recurse(
-		qctx->client, qctx->qtype,
-		dns_linkedname_name(qctx->client->query.qname), qctx->resuming);
+	result = ns_query_recurse(qctx->client, qctx->qtype,
+				  dns_name(qctx->client->query.qname),
+				  qctx->resuming);
 	if (result == ISC_R_SUCCESS) {
 		CALL_HOOK(NS_QUERY_ZEROTTL_RECURSE, qctx);
 		qctx->client->query.recursing = true;
@@ -9860,7 +9835,7 @@ query_cname(query_ctx_t *qctx) {
 	}

 	if (!qctx->is_zone && qctx->client->query.recursionok) {
-		query_prefetch(qctx->client, dns_linkedname_name(qctx->fname),
+		query_prefetch(qctx->client, dns_name(qctx->fname),
 			       qctx->rdataset);
 	}

@@ -9893,7 +9868,7 @@ query_cname(query_ctx_t *qctx) {
 	RUNTIME_CHECK(result == ISC_R_SUCCESS);
 	dns_rdata_reset(&rdata);

-	dns_name_copy(&cname.cname, dns_linkedname_name(tname));
+	dns_name_copy(&cname.cname, dns_name(tname));

 	ns_client_qnamereplace(qctx->client, tname);
 	qctx->want_restart = true;
@@ -9962,7 +9937,7 @@ query_dname(query_ctx_t *qctx) {
 	wildcardproof = query_savewildcardproof(qctx, &wildcardfixed);

 	if (!qctx->is_zone && qctx->client->query.recursionok) {
-		query_prefetch(qctx->client, dns_linkedname_name(qctx->fname),
+		query_prefetch(qctx->client, dns_name(qctx->fname),
 			       qctx->rdataset);
 	}
 	query_addrrset(qctx, &qctx->fname, &qctx->rdataset, sigrdatasetp,
@@ -9993,20 +9968,20 @@ query_dname(query_ctx_t *qctx) {
 	RUNTIME_CHECK(result == ISC_R_SUCCESS);
 	dns_rdata_reset(&rdata);

-	dns_name_copy(&dname.dname, dns_linkedname_name(tname));
+	dns_name_copy(&dname.dname, dns_name(tname));

 	/*
 	 * Construct the new qname consisting of
 	 * <found name prefix>.<dname target>
 	 */
 	prefix = dns_fixedname_initname(&fixed);
-	dns_name_split(dns_linkedname_name(qctx->client->query.qname), nlabels,
-		       prefix, NULL);
+	dns_name_split(dns_name(qctx->client->query.qname), nlabels, prefix,
+		       NULL);
 	INSIST(qctx->fname == NULL);
 	qctx->dbuf = ns_client_getnamebuf(qctx->client);
 	qctx->fname = ns_client_newname(qctx->client, qctx->dbuf, &b);
-	result = dns_name_concatenate(prefix, dns_linkedname_name(tname),
-				      dns_linkedname_name(qctx->fname));
+	result = dns_name_concatenate(prefix, dns_name(tname),
+				      dns_name(qctx->fname));
 	dns_message_puttempname(qctx->client->message, &tname);
 	tname = NULL;

@@ -10033,20 +10008,19 @@ query_dname(query_ctx_t *qctx) {
 	dns_name_t *deniedname = dns_fixedname_initname(&fdeniedname);
 	if (qctx->view->denyanswernames != NULL &&
 	    dns_nametree_covered(qctx->view->denyanswernames,
-				 dns_linkedname_name(qctx->fname), deniedname,
-				 0) &&
-	    !dns_nametree_covered(
-		    qctx->view->answernames_exclude,
-		    dns_linkedname_name(qctx->client->query.qname), NULL, 0) &&
-	    !dns_name_issubdomain(
-		    dns_linkedname_name(qctx->client->query.qname), deniedname))
+				 dns_name(qctx->fname), deniedname, 0) &&
+	    !dns_nametree_covered(qctx->view->answernames_exclude,
+				  dns_name(qctx->client->query.qname), NULL,
+				  0) &&
+	    !dns_name_issubdomain(dns_name(qctx->client->query.qname),
+				  deniedname))
 	{
 		char qnamebuf[DNS_NAME_FORMATSIZE];
 		char tnamebuf[DNS_NAME_FORMATSIZE];

-		dns_name_format(dns_linkedname_name(qctx->client->query.qname),
-				qnamebuf, sizeof(qnamebuf));
-		dns_name_format(dns_linkedname_name(qctx->fname), tnamebuf,
+		dns_name_format(dns_name(qctx->client->query.qname), qnamebuf,
+				sizeof(qnamebuf));
+		dns_name_format(dns_name(qctx->fname), tnamebuf,
 				sizeof(tnamebuf));
 		ns_client_log(qctx->client, NS_LOGCATEGORY_QUERIES,
 			      NS_LOGMODULE_QUERY, ISC_LOG_NOTICE,
@@ -10117,7 +10091,7 @@ query_addcname(query_ctx_t *qctx, dns_trust_t trust, dns_ttl_t ttl) {

 	dns_message_gettempname(client->message, &aname);

-	dns_name_copy(client->query.qname, dns_linkedname_name(aname));
+	dns_name_copy(client->query.qname, dns_name(aname));

 	dns_message_gettemprdatalist(client->message, &rdatalist);

@@ -10138,7 +10112,7 @@ query_addcname(query_ctx_t *qctx, dns_trust_t trust, dns_ttl_t ttl) {
 	ISC_LIST_APPEND(rdatalist->rdata, rdata, link);
 	dns_rdatalist_tordataset(rdatalist, rdataset);
 	rdataset->trust = trust;
-	dns_rdataset_setownercase(rdataset, dns_linkedname_name(aname));
+	dns_rdataset_setownercase(rdataset, dns_name(aname));

 	query_addrrset(qctx, &aname, &rdataset, NULL, NULL, DNS_SECTION_ANSWER);
 	if (rdataset != NULL) {
@@ -10218,7 +10192,7 @@ query_addsoa(query_ctx_t *qctx, unsigned int override_ttl,
 	 * We'll be releasing 'name' before returning, so it's safe to
 	 * use clone instead of copying here.
 	 */
-	dns_name_clone(dns_db_origin(qctx->db), dns_linkedname_name(name));
+	dns_name_clone(dns_db_origin(qctx->db), dns_name(name));

 	rdataset = ns_client_newrdataset(client);
 	if (client->inner.wantdnssec && dns_db_issecure(qctx->db)) {
@@ -10340,7 +10314,7 @@ query_addns(query_ctx_t *qctx) {
 	 * Get resources and make 'name' be the database origin.
 	 */
 	dns_message_gettempname(client->message, &name);
-	dns_name_clone(dns_db_origin(qctx->db), dns_linkedname_name(name));
+	dns_name_clone(dns_db_origin(qctx->db), dns_name(name));
 	rdataset = ns_client_newrdataset(client);

 	if (client->inner.wantdnssec && dns_db_issecure(qctx->db)) {
@@ -10480,8 +10454,7 @@ db_find:
 		result = dns_db_findext(
 			db, client->query.qname, version, dns_rdatatype_ns,
 			client->query.dboptions, client->inner.now,
-			dns_linkedname_name(fname), &cm, &ci, rdataset,
-			sigrdataset);
+			dns_name(fname), &cm, &ci, rdataset, sigrdataset);
 		if (result != DNS_R_DELEGATION) {
 			goto cleanup;
 		}
@@ -10661,9 +10634,9 @@ again:
 	rdataset = ns_client_newrdataset(client);
 	sigrdataset = ns_client_newrdataset(client);

-	result = dns_db_findext(
-		qctx->db, name, qctx->version, dns_rdatatype_nsec, options, 0,
-		dns_linkedname_name(fname), &cm, &ci, rdataset, sigrdataset);
+	result = dns_db_findext(qctx->db, name, qctx->version,
+				dns_rdatatype_nsec, options, 0, dns_name(fname),
+				&cm, &ci, rdataset, sigrdataset);

 	if (!dns_rdataset_isassociated(rdataset)) {
 		/*
@@ -10689,8 +10662,8 @@ again:
 			}
 			result = dns_db_findext(qctx->db, cname, qctx->version,
 						dns_rdatatype_nsec, options, 0,
-						dns_linkedname_name(fname), &cm,
-						&ci, NULL, NULL);
+						dns_name(fname), &cm, &ci, NULL,
+						NULL);
 			if (result == DNS_R_NXDOMAIN) {
 				maxlabels = labels;
 			} else {
@@ -10702,8 +10675,8 @@ again:
 		 * Add closest (provable) encloser NSEC3.
 		 */
 		query_findclosestnsec3(cname, qctx->db, qctx->version, client,
-				       rdataset, sigrdataset,
-				       dns_linkedname_name(fname), true, cname);
+				       rdataset, sigrdataset, dns_name(fname),
+				       true, cname);
 		if (!dns_rdataset_isassociated(rdataset)) {
 			goto cleanup;
 		}
@@ -10751,8 +10724,8 @@ again:
 		}

 		query_findclosestnsec3(wname, qctx->db, qctx->version, client,
-				       rdataset, sigrdataset,
-				       dns_linkedname_name(fname), false, NULL);
+				       rdataset, sigrdataset, dns_name(fname),
+				       false, NULL);
 		if (!dns_rdataset_isassociated(rdataset)) {
 			goto cleanup;
 		}
@@ -10788,9 +10761,9 @@ again:
 		 */
 		CHECK(dns_name_concatenate(dns_wildcardname, cname, wname));

-		query_findclosestnsec3(
-			wname, qctx->db, qctx->version, client, rdataset,
-			sigrdataset, dns_linkedname_name(fname), nodata, NULL);
+		query_findclosestnsec3(wname, qctx->db, qctx->version, client,
+				       rdataset, sigrdataset, dns_name(fname),
+				       nodata, NULL);
 		if (!dns_rdataset_isassociated(rdataset)) {
 			goto cleanup;
 		}
diff --git a/lib/ns/update.c b/lib/ns/update.c
index 9d503f8eec..53c1525f9d 100644
--- a/lib/ns/update.c
+++ b/lib/ns/update.c
@@ -1647,7 +1647,7 @@ send_update(ns_client_t *client, dns_zone_t *zone) {
 		dns_rdata_t rdata = DNS_RDATA_INIT;
 		dns_ttl_t ttl;
 		dns_rdataclass_t update_class;
-		const dns_name_t *name = dns_linkedname_name(linkedname);
+		const dns_name_t *name = dns_name(linkedname);

 		INSIST(ssutable == NULL || update < maxbytypelen);
 		get_current_rr(linkedname, &rdata, &covers, &ttl,
@@ -1920,11 +1920,10 @@ ns_update_start(ns_client_t *client, isc_nmhandle_t *handle,
 		      "update zone section contains multiple RRs");
 	}

-	result = dns_view_findzone(client->inner.view,
-				   dns_linkedname_name(zonename),
+	result = dns_view_findzone(client->inner.view, dns_name(zonename),
 				   DNS_ZTFIND_EXACT, &zone);
 	if (result != ISC_R_SUCCESS) {
-		FAILN(DNS_R_NOTAUTH, dns_linkedname_name(zonename),
+		FAILN(DNS_R_NOTAUTH, dns_name(zonename),
 		      "not authoritative for update zone");
 	}

@@ -2695,7 +2694,7 @@ update_action(void *arg) {
 		dns_rdata_t rdata = DNS_RDATA_INIT;
 		dns_ttl_t ttl;
 		dns_rdataclass_t update_class;
-		const dns_name_t *name = dns_linkedname_name(linkedname);
+		const dns_name_t *name = dns_name(linkedname);
 		bool flag;

 		get_current_rr(linkedname, &rdata, &covers, &ttl,
@@ -2808,7 +2807,7 @@ update_action(void *arg) {
 		dns_rdata_t rdata = DNS_RDATA_INIT;
 		dns_ttl_t ttl;
 		dns_rdataclass_t update_class;
-		const dns_name_t *name = dns_linkedname_name(linkedname);
+		const dns_name_t *name = dns_name(linkedname);
 		bool flag;
 		size_t maxidx = update++;

@@ -3010,7 +3009,7 @@ update_action(void *arg) {
 				ctx.ver = ver;
 				ctx.diff = &diff;
 				ctx.name = name;
-				ctx.oldname = dns_linkedname_name(linkedname);
+				ctx.oldname = dns_name(linkedname);
 				ctx.update_rr = &rdata;
 				ctx.update_rr_ttl = ttl;
 				ctx.ignore_add = false;
diff --git a/lib/ns/xfrout.c b/lib/ns/xfrout.c
index 5afd3de47c..84aec80d68 100644
--- a/lib/ns/xfrout.c
+++ b/lib/ns/xfrout.c
@@ -768,7 +768,7 @@ ns_xfr_start(ns_client_t *client, dns_rdatatype_t reqtype) {
 	 */
 	question_name_wl =
 		ISC_LIST_HEAD(request->sections[DNS_SECTION_QUESTION]);
-	question_name = dns_linkedname_name(question_name_wl);
+	question_name = dns_name(question_name_wl);
 	question_rdataset = ISC_LIST_HEAD(question_name_wl->list);
 	question_class = question_rdataset->rdclass;
 	INSIST(question_rdataset->type == reqtype);
@@ -1450,7 +1450,7 @@ sendstream(xfrout_ctx_t *xfr) {
 			r.length = xfr->qname->length;
 			isc_buffer_putmem(&xfr->buf, xfr->qname->ndata,
 					  xfr->qname->length);
-			dns_name_fromregion(dns_linkedname_name(qname), &r);
+			dns_name_fromregion(dns_name(qname), &r);
 			ISC_LIST_INIT(qname->list);
 			ISC_LIST_APPEND(qname->list, qrdataset, link);

@@ -1518,7 +1518,7 @@ sendstream(xfrout_ctx_t *xfr) {
 		INSIST(r.length >= name->length);
 		r.length = name->length;
 		isc_buffer_putmem(&xfr->buf, name->ndata, name->length);
-		dns_name_fromregion(dns_linkedname_name(msgname), &r);
+		dns_name_fromregion(dns_name(msgname), &r);

 		/* Reserve space for RR header. */
 		isc_buffer_add(&xfr->buf, 10);
diff --git a/tests/bench/load-names.c b/tests/bench/load-names.c
index a6b6594150..4126bc328c 100644
--- a/tests/bench/load-names.c
+++ b/tests/bench/load-names.c
@@ -66,9 +66,8 @@ static size_t
 item_makekey(dns_qpkey_t key, void *ctx, void *pval, uint32_t ival) {
 	UNUSED(ctx);
 	assert(pval == &item[ival]);
-	return dns_qpkey_fromname(
-		key, dns_linkedname_name(&item[ival].fixed.name_wl),
-		DNS_DBNAMESPACE_NORMAL);
+	return dns_qpkey_fromname(key, dns_name(&item[ival].fixed.name_wl),
+				  DNS_DBNAMESPACE_NORMAL);
 }

 static void
@@ -84,17 +83,17 @@ const dns_qpmethods_t qpmethods = {
 	testname,
 };

-#define CHECKN(count, result)                                    \
-	do {                                                     \
-		if (result != ISC_R_SUCCESS) {                   \
-			dns_name_t *name = dns_linkedname_name(  \
-				&item[count].fixed.name_wl);     \
-			char buf[DNS_NAME_MAXTEXT] = { 0 };      \
-			dns_name_format(name, buf, sizeof(buf)); \
-			fprintf(stderr, "%s: %s\n", buf,         \
-				isc_result_totext(result));      \
-			exit(EXIT_FAILURE);                      \
-		}                                                \
+#define CHECKN(count, result)                                         \
+	do {                                                          \
+		if (result != ISC_R_SUCCESS) {                        \
+			dns_name_t *name =                            \
+				dns_name(&item[count].fixed.name_wl); \
+			char buf[DNS_NAME_MAXTEXT] = { 0 };           \
+			dns_name_format(name, buf, sizeof(buf));      \
+			fprintf(stderr, "%s: %s\n", buf,              \
+				isc_result_totext(result));           \
+			exit(EXIT_FAILURE);                           \
+		}                                                     \
 	} while (0)

 struct fun {
@@ -128,8 +127,7 @@ add_lfht(void *lfht, size_t count) {
 	unsigned long hash = dns_name_hash(&item[count].fixed.name_wl);

 	struct cds_lfht_node *ht_node = cds_lfht_add_unique(
-		lfht, hash, lfht_match,
-		dns_linkedname_name(&item[count].fixed.name_wl),
+		lfht, hash, lfht_match, dns_name(&item[count].fixed.name_wl),
 		&item[count].ht_node);

 	if (ht_node != &item[count].ht_node) {
@@ -145,7 +143,7 @@ get_lfht(void *lfht, size_t count, void **pval) {

 	struct cds_lfht_iter iter;
 	cds_lfht_lookup(lfht, hash, lfht_match,
-			dns_linkedname_name(&item[count].fixed.name_wl), &iter);
+			dns_name(&item[count].fixed.name_wl), &iter);

 	struct cds_lfht_node *ht_node = cds_lfht_iter_get_node(&iter);
 	if (ht_node == NULL) {
@@ -206,8 +204,7 @@ static isc_result_t
 add_hashmap(void *hashmap, size_t count) {
 	isc_result_t result = isc_hashmap_add(
 		hashmap, dns_name_hash(&item[count].fixed.name_wl), name_match,
-		dns_linkedname_name(&item[count].fixed.name_wl), &item[count],
-		NULL);
+		dns_name(&item[count].fixed.name_wl), &item[count], NULL);
 	return result;
 }

@@ -215,7 +212,7 @@ static isc_result_t
 get_hashmap(void *hashmap, size_t count, void **pval) {
 	isc_result_t result = isc_hashmap_find(
 		hashmap, dns_name_hash(&item[count].fixed.name_wl), name_match,
-		dns_linkedname_name(&item[count].fixed.name_wl), pval);
+		dns_name(&item[count].fixed.name_wl), pval);
 	return result;
 }

@@ -331,8 +328,7 @@ sqz_qp(void *qp) {

 static isc_result_t
 get_qp(void *qp, size_t count, void **pval) {
-	return dns_qp_getname(qp,
-			      dns_linkedname_name(&item[count].fixed.name_wl),
+	return dns_qp_getname(qp, dns_name(&item[count].fixed.name_wl),
 			      DNS_DBNAMESPACE_NORMAL, pval, NULL);
 }

diff --git a/tests/libtest/ns.c b/tests/libtest/ns.c
index 9df5ecf739..8b2ace5959 100644
--- a/tests/libtest/ns.c
+++ b/tests/libtest/ns.c
@@ -284,8 +284,8 @@ attach_query_msg_to_client(ns_client_t *client, const char *qnamestr,
 	 * class IN and type "qtype", link the two and add the result to the
 	 * QUESTION section of the query.
 	 */
-	result = dns_name_fromstring(dns_linkedname_name(qname), qnamestr,
-				     dns_rootname, 0, isc_g_mctx);
+	result = dns_name_fromstring(dns_name(qname), qnamestr, dns_rootname, 0,
+				     isc_g_mctx);
 	if (result != ISC_R_SUCCESS) {
 		goto put_name;
 	}