Expand the usage of mark_ancient() helper functions

When the mark_ancient() helper function was introduced, couple of places
with duplicate (or almost duplicate) code was missed.  Move the
mark_ancient() function closer to the top of the file, and correctly use
it in places that mark the header as ANCIENT.

(cherry picked from commit 58179e6a19)
This commit is contained in:
Ondřej Surý
2025-02-03 15:53:34 +01:00
parent 4b114838de
commit 302aca809d
4 changed files with 22 additions and 31 deletions
+10 -15
View File
@@ -954,15 +954,20 @@ setttl(dns_slabheader_t *header, dns_ttl_t newttl) {
}
}
static void
mark_ancient(dns_slabheader_t *header) {
setttl(header, 0);
mark(header, DNS_SLABHEADERATTR_ANCIENT);
HEADERNODE(header)->dirty = 1;
}
/*
* Caller must hold the node (write) lock.
*/
static void
expireheader(dns_slabheader_t *header, isc_rwlocktype_t *nlocktypep,
isc_rwlocktype_t *tlocktypep, dns_expire_t reason DNS__DB_FLARG) {
setttl(header, 0);
mark(header, DNS_SLABHEADERATTR_ANCIENT);
HEADERNODE(header)->dirty = 1;
mark_ancient(header);
if (isc_refcount_current(&HEADERNODE(header)->erefs) == 0) {
qpcache_t *qpdb = (qpcache_t *)header->db;
@@ -1271,8 +1276,7 @@ check_stale_header(qpcnode_t *node, dns_slabheader_t *header,
}
dns_slabheader_destroy(&header);
} else {
mark(header, DNS_SLABHEADERATTR_ANCIENT);
HEADERNODE(header)->dirty = 1;
mark_ancient(header);
*header_prev = header;
}
} else {
@@ -2234,8 +2238,7 @@ findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
* non-zero. This is so because 'node' is an
* argument to the function.
*/
mark(header, DNS_SLABHEADERATTR_ANCIENT);
HEADERNODE(header)->dirty = 1;
mark_ancient(header);
}
} else if (EXISTS(header) && !ANCIENT(header)) {
if (header->type == matchtype) {
@@ -2586,13 +2589,6 @@ qpdb_destroy(dns_db_t *arg) {
qpcache_detach(&qpdb);
}
static void
mark_ancient(dns_slabheader_t *header) {
setttl(header, 0);
mark(header, DNS_SLABHEADERATTR_ANCIENT);
HEADERNODE(header)->dirty = 1;
}
/*%
* Clean up dead nodes. These are nodes which have no references, and
* have no data. They are dead but we could not or chose not to delete
@@ -3163,7 +3159,6 @@ find_header:
newheader->next = topheader->next;
newheader->down = topheader;
topheader->next = newheader;
qpnode->dirty = 1;
mark_ancient(header);
if (sigheader != NULL) {
mark_ancient(sigheader);
+3 -9
View File
@@ -417,9 +417,7 @@ check_stale_header(dns_rbtnode_t *node, dns_slabheader_t *header,
}
dns_slabheader_destroy(&header);
} else {
dns__rbtdb_mark(header,
DNS_SLABHEADERATTR_ANCIENT);
RBTDB_HEADERNODE(header)->dirty = 1;
dns__rbtdb_mark_ancient(header);
*header_prev = header;
}
} else {
@@ -1401,9 +1399,7 @@ cache_findrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
* non-zero. This is so because 'node' is an
* argument to the function.
*/
dns__rbtdb_mark(header,
DNS_SLABHEADERATTR_ANCIENT);
RBTDB_HEADERNODE(header)->dirty = 1;
dns__rbtdb_mark_ancient(header);
}
} else if (EXISTS(header) && !ANCIENT(header)) {
if (header->type == matchtype) {
@@ -1589,9 +1585,7 @@ void
dns__cacherbt_expireheader(dns_slabheader_t *header,
isc_rwlocktype_t *tlocktypep,
dns_expire_t reason DNS__DB_FLARG) {
dns__rbtdb_setttl(header, 0);
dns__rbtdb_mark(header, DNS_SLABHEADERATTR_ANCIENT);
RBTDB_HEADERNODE(header)->dirty = 1;
dns__rbtdb_mark_ancient(header);
if (isc_refcount_current(&RBTDB_HEADERNODE(header)->references) == 0) {
isc_rwlocktype_t nlocktype = isc_rwlocktype_write;
+7 -7
View File
@@ -857,8 +857,8 @@ dns__rbtdb_mark(dns_slabheader_t *header, uint_least16_t flag) {
}
}
static void
mark_ancient(dns_slabheader_t *header) {
void
dns__rbtdb_mark_ancient(dns_slabheader_t *header) {
dns__rbtdb_setttl(header, 0);
dns__rbtdb_mark(header, DNS_SLABHEADERATTR_ANCIENT);
RBTDB_HEADERNODE(header)->dirty = 1;
@@ -2604,7 +2604,7 @@ dns__rbtdb_add(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode,
topheader != NULL;
topheader = topheader->next)
{
mark_ancient(topheader);
dns__rbtdb_mark_ancient(topheader);
}
goto find_header;
}
@@ -2667,7 +2667,7 @@ dns__rbtdb_add(dns_rbtdb_t *rbtdb, dns_rbtnode_t *rbtnode,
* The new rdataset is better. Expire the
* ncache entry.
*/
mark_ancient(topheader);
dns__rbtdb_mark_ancient(topheader);
topheader = NULL;
goto find_header;
}
@@ -3013,9 +3013,9 @@ find_header:
changed->dirty = true;
}
if (rbtversion == NULL) {
mark_ancient(header);
dns__rbtdb_mark_ancient(header);
if (sigheader != NULL) {
mark_ancient(sigheader);
dns__rbtdb_mark_ancient(sigheader);
}
}
if (rbtversion != NULL && !header_nx) {
@@ -3119,7 +3119,7 @@ find_header:
expireheader = newheader;
}
mark_ancient(expireheader);
dns__rbtdb_mark_ancient(expireheader);
/*
* FIXME: In theory, we should mark the RRSIG
* and the header at the same time, but there is
+2
View File
@@ -486,6 +486,8 @@ dns__zonerbt_addwildcards(dns_rbtdb_t *rbtdb, const dns_name_t *name,
* Cache-specific functions that are called from rbtdb.c
*/
void
dns__rbtdb_mark_ancient(dns_slabheader_t *header);
void
dns__cacherbt_expireheader(dns_slabheader_t *header,
isc_rwlocktype_t *tlocktypep,
dns_expire_t reason DNS__DB_FLARG);