Browse Source

tdb2: simplify logging levels, rename TDB_DEBUG_* to TDB_LOG_*

It was never clear to me which levels should be used for what cases.
I can only usefully distinguish three at the moment:
(1) TDB errors, which render the TDB unreliable.
(2) TDB user errors, caused by API misuse.
(3) TDB notifications of strange behaviour, from which we have recovered.
Rusty Russell 15 years ago
parent
commit
587982955c

+ 39 - 39
ccan/tdb2/check.c

@@ -43,7 +43,7 @@ static bool check_header(struct tdb_context *tdb, tdb_off_t *recovery)
 	hash_test = TDB_HASH_MAGIC;
 	hash_test = TDB_HASH_MAGIC;
 	hash_test = tdb_hash(tdb, &hash_test, sizeof(hash_test));
 	hash_test = tdb_hash(tdb, &hash_test, sizeof(hash_test));
 	if (hdr.hash_test != hash_test) {
 	if (hdr.hash_test != hash_test) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "check: hash test %llu should be %llu",
 			   "check: hash test %llu should be %llu",
 			   (long long)hdr.hash_test,
 			   (long long)hdr.hash_test,
 			   (long long)hash_test);
 			   (long long)hash_test);
@@ -51,7 +51,7 @@ static bool check_header(struct tdb_context *tdb, tdb_off_t *recovery)
 	}
 	}
 
 
 	if (strcmp(hdr.magic_food, TDB_MAGIC_FOOD) != 0) {
 	if (strcmp(hdr.magic_food, TDB_MAGIC_FOOD) != 0) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "check: bad magic '%.*s'",
 			   "check: bad magic '%.*s'",
 			   (unsigned)sizeof(hdr.magic_food), hdr.magic_food);
 			   (unsigned)sizeof(hdr.magic_food), hdr.magic_food);
 		return false;
 		return false;
@@ -60,7 +60,7 @@ static bool check_header(struct tdb_context *tdb, tdb_off_t *recovery)
 	*recovery = hdr.recovery;
 	*recovery = hdr.recovery;
 	if (*recovery) {
 	if (*recovery) {
 		if (*recovery < sizeof(hdr) || *recovery > tdb->map_size) {
 		if (*recovery < sizeof(hdr) || *recovery > tdb->map_size) {
-			tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+			tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 				 "tdb_check: invalid recovery offset %zu",
 				 "tdb_check: invalid recovery offset %zu",
 				 (size_t)*recovery);
 				 (size_t)*recovery);
 			return false;
 			return false;
@@ -96,27 +96,27 @@ static bool check_hash_chain(struct tdb_context *tdb,
 		return false;
 		return false;
 
 
 	if (rec_magic(&rec) != TDB_CHAIN_MAGIC) {
 	if (rec_magic(&rec) != TDB_CHAIN_MAGIC) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "tdb_check: Bad hash chain magic %llu",
 			   "tdb_check: Bad hash chain magic %llu",
 			   (long long)rec_magic(&rec));
 			   (long long)rec_magic(&rec));
 		return false;
 		return false;
 	}
 	}
 
 
 	if (rec_data_length(&rec) != sizeof(struct tdb_chain)) {
 	if (rec_data_length(&rec) != sizeof(struct tdb_chain)) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "tdb_check: Bad hash chain length %llu vs %zu",
 			   "tdb_check: Bad hash chain length %llu vs %zu",
 			   (long long)rec_data_length(&rec),
 			   (long long)rec_data_length(&rec),
 			   sizeof(struct tdb_chain));
 			   sizeof(struct tdb_chain));
 		return false;
 		return false;
 	}
 	}
 	if (rec_key_length(&rec) != 0) {
 	if (rec_key_length(&rec) != 0) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			 "tdb_check: Bad hash chain key length %llu",
 			 "tdb_check: Bad hash chain key length %llu",
 			 (long long)rec_key_length(&rec));
 			 (long long)rec_key_length(&rec));
 		return false;
 		return false;
 	}
 	}
 	if (rec_hash(&rec) != 0) {
 	if (rec_hash(&rec) != 0) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			 "tdb_check: Bad hash chain hash value %llu",
 			 "tdb_check: Bad hash chain hash value %llu",
 			 (long long)rec_hash(&rec));
 			 (long long)rec_hash(&rec));
 		return false;
 		return false;
@@ -157,14 +157,14 @@ static bool check_hash_record(struct tdb_context *tdb,
 		return false;
 		return false;
 
 
 	if (rec_magic(&rec) != TDB_HTABLE_MAGIC) {
 	if (rec_magic(&rec) != TDB_HTABLE_MAGIC) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "tdb_check: Bad hash table magic %llu",
 			   "tdb_check: Bad hash table magic %llu",
 			   (long long)rec_magic(&rec));
 			   (long long)rec_magic(&rec));
 		return false;
 		return false;
 	}
 	}
 	if (rec_data_length(&rec)
 	if (rec_data_length(&rec)
 	    != sizeof(tdb_off_t) << TDB_SUBLEVEL_HASH_BITS) {
 	    != sizeof(tdb_off_t) << TDB_SUBLEVEL_HASH_BITS) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "tdb_check: Bad hash table length %llu vs %llu",
 			   "tdb_check: Bad hash table length %llu vs %llu",
 			   (long long)rec_data_length(&rec),
 			   (long long)rec_data_length(&rec),
 			   (long long)sizeof(tdb_off_t)
 			   (long long)sizeof(tdb_off_t)
@@ -172,13 +172,13 @@ static bool check_hash_record(struct tdb_context *tdb,
 		return false;
 		return false;
 	}
 	}
 	if (rec_key_length(&rec) != 0) {
 	if (rec_key_length(&rec) != 0) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			 "tdb_check: Bad hash table key length %llu",
 			 "tdb_check: Bad hash table key length %llu",
 			 (long long)rec_key_length(&rec));
 			 (long long)rec_key_length(&rec));
 		return false;
 		return false;
 	}
 	}
 	if (rec_hash(&rec) != 0) {
 	if (rec_hash(&rec) != 0) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			 "tdb_check: Bad hash table hash value %llu",
 			 "tdb_check: Bad hash table hash value %llu",
 			 (long long)rec_hash(&rec));
 			 (long long)rec_hash(&rec));
 		return false;
 		return false;
@@ -240,7 +240,7 @@ static bool check_hash_tree(struct tdb_context *tdb,
 			p = asearch(&off, used, num_used, off_cmp);
 			p = asearch(&off, used, num_used, off_cmp);
 			if (!p) {
 			if (!p) {
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					   "tdb_check: Invalid offset %llu "
 					   "tdb_check: Invalid offset %llu "
 					   "in hash", (long long)off);
 					   "in hash", (long long)off);
 				goto fail;
 				goto fail;
@@ -253,7 +253,7 @@ static bool check_hash_tree(struct tdb_context *tdb,
 				/* Chained entries are unordered. */
 				/* Chained entries are unordered. */
 				if (is_subhash(group[b])) {
 				if (is_subhash(group[b])) {
 					tdb_logerr(tdb, TDB_ERR_CORRUPT,
 					tdb_logerr(tdb, TDB_ERR_CORRUPT,
-						   TDB_DEBUG_ERROR,
+						   TDB_LOG_ERROR,
 						   "tdb_check: Invalid chain"
 						   "tdb_check: Invalid chain"
 						   " entry subhash");
 						   " entry subhash");
 					goto fail;
 					goto fail;
@@ -261,7 +261,7 @@ static bool check_hash_tree(struct tdb_context *tdb,
 				h = hash_record(tdb, off);
 				h = hash_record(tdb, off);
 				if (h != hprefix) {
 				if (h != hprefix) {
 					tdb_logerr(tdb, TDB_ERR_CORRUPT,
 					tdb_logerr(tdb, TDB_ERR_CORRUPT,
-						   TDB_DEBUG_ERROR,
+						   TDB_LOG_ERROR,
 						   "check: bad hash chain"
 						   "check: bad hash chain"
 						   " placement"
 						   " placement"
 						   " 0x%llx vs 0x%llx",
 						   " 0x%llx vs 0x%llx",
@@ -300,7 +300,7 @@ static bool check_hash_tree(struct tdb_context *tdb,
 			if (get_bits(h, hprefix_bits, &used_bits) != hprefix
 			if (get_bits(h, hprefix_bits, &used_bits) != hprefix
 			    && hprefix_bits) {
 			    && hprefix_bits) {
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					   "check: bad hash placement"
 					   "check: bad hash placement"
 					   " 0x%llx vs 0x%llx",
 					   " 0x%llx vs 0x%llx",
 					 (long long)h, (long long)hprefix);
 					 (long long)h, (long long)hprefix);
@@ -310,7 +310,7 @@ static bool check_hash_tree(struct tdb_context *tdb,
 			/* Does it belong in this group? */
 			/* Does it belong in this group? */
 			if (get_bits(h, group_bits, &used_bits) != g) {
 			if (get_bits(h, group_bits, &used_bits) != g) {
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					   "check: bad group %llu vs %u",
 					   "check: bad group %llu vs %u",
 					   (long long)h, g);
 					   (long long)h, g);
 				goto fail;
 				goto fail;
@@ -322,7 +322,7 @@ static bool check_hash_tree(struct tdb_context *tdb,
 			    != bucket) {
 			    != bucket) {
 				used_bits -= TDB_HASH_GROUP_BITS;
 				used_bits -= TDB_HASH_GROUP_BITS;
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					 "check: bad bucket %u vs %u",
 					 "check: bad bucket %u vs %u",
 					 (unsigned)get_bits(h,
 					 (unsigned)get_bits(h,
 							TDB_HASH_GROUP_BITS,
 							TDB_HASH_GROUP_BITS,
@@ -338,7 +338,7 @@ static bool check_hash_tree(struct tdb_context *tdb,
 			     i = (i + 1) % (1 << TDB_HASH_GROUP_BITS)) {
 			     i = (i + 1) % (1 << TDB_HASH_GROUP_BITS)) {
 				if (group[i] == 0) {
 				if (group[i] == 0) {
 					tdb_logerr(tdb, TDB_ERR_CORRUPT,
 					tdb_logerr(tdb, TDB_ERR_CORRUPT,
-						   TDB_DEBUG_ERROR,
+						   TDB_LOG_ERROR,
 						   "check: bad group placement"
 						   "check: bad group placement"
 						   " %u vs %u",
 						   " %u vs %u",
 						   b, bucket);
 						   b, bucket);
@@ -352,7 +352,7 @@ static bool check_hash_tree(struct tdb_context *tdb,
 			/* Bottom bits must match header. */
 			/* Bottom bits must match header. */
 			if ((h & ((1 << 11)-1)) != rec_hash(&rec)) {
 			if ((h & ((1 << 11)-1)) != rec_hash(&rec)) {
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					   "tdb_check: Bad hash magic at"
 					   "tdb_check: Bad hash magic at"
 					   " offset %llu (0x%llx vs 0x%llx)",
 					   " offset %llu (0x%llx vs 0x%llx)",
 					   (long long)off,
 					   (long long)off,
@@ -403,7 +403,7 @@ static bool check_hash(struct tdb_context *tdb,
 		return false;
 		return false;
 
 
 	if (num_found != num_used) {
 	if (num_found != num_used) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "tdb_check: Not all entries are in hash");
 			   "tdb_check: Not all entries are in hash");
 		return false;
 		return false;
 	}
 	}
@@ -417,13 +417,13 @@ static bool check_free(struct tdb_context *tdb,
 		       unsigned int bucket)
 		       unsigned int bucket)
 {
 {
 	if (frec_magic(frec) != TDB_FREE_MAGIC) {
 	if (frec_magic(frec) != TDB_FREE_MAGIC) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "tdb_check: offset %llu bad magic 0x%llx",
 			   "tdb_check: offset %llu bad magic 0x%llx",
 			   (long long)off, (long long)frec->magic_and_prev);
 			   (long long)off, (long long)frec->magic_and_prev);
 		return false;
 		return false;
 	}
 	}
 	if (frec_ftable(frec) != ftable) {
 	if (frec_ftable(frec) != ftable) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "tdb_check: offset %llu bad freetable %u",
 			   "tdb_check: offset %llu bad freetable %u",
 			   (long long)off, frec_ftable(frec));
 			   (long long)off, frec_ftable(frec));
 		return false;
 		return false;
@@ -434,14 +434,14 @@ static bool check_free(struct tdb_context *tdb,
 			      false))
 			      false))
 		return false;
 		return false;
 	if (size_to_bucket(frec_len(frec)) != bucket) {
 	if (size_to_bucket(frec_len(frec)) != bucket) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "tdb_check: offset %llu in wrong bucket %u vs %u",
 			   "tdb_check: offset %llu in wrong bucket %u vs %u",
 			   (long long)off,
 			   (long long)off,
 			   bucket, size_to_bucket(frec_len(frec)));
 			   bucket, size_to_bucket(frec_len(frec)));
 		return false;
 		return false;
 	}
 	}
 	if (prev != frec_prev(frec)) {
 	if (prev != frec_prev(frec)) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "tdb_check: offset %llu bad prev %llu vs %llu",
 			   "tdb_check: offset %llu bad prev %llu vs %llu",
 			   (long long)off,
 			   (long long)off,
 			   (long long)prev, (long long)frec_len(frec));
 			   (long long)prev, (long long)frec_len(frec));
@@ -468,7 +468,7 @@ static bool check_free_table(struct tdb_context *tdb,
 	    || rec_key_length(&ft.hdr) != 0
 	    || rec_key_length(&ft.hdr) != 0
 	    || rec_data_length(&ft.hdr) != sizeof(ft) - sizeof(ft.hdr)
 	    || rec_data_length(&ft.hdr) != sizeof(ft) - sizeof(ft.hdr)
 	    || rec_hash(&ft.hdr) != 0) {
 	    || rec_hash(&ft.hdr) != 0) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "tdb_check: Invalid header on free table");
 			   "tdb_check: Invalid header on free table");
 		return false;
 		return false;
 	}
 	}
@@ -490,7 +490,7 @@ static bool check_free_table(struct tdb_context *tdb,
 			p = asearch(&off, fr, num_free, off_cmp);
 			p = asearch(&off, fr, num_free, off_cmp);
 			if (!p) {
 			if (!p) {
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					   "tdb_check: Invalid offset"
 					   "tdb_check: Invalid offset"
 					   " %llu in free table",
 					   " %llu in free table",
 					   (long long)off);
 					   (long long)off);
@@ -552,14 +552,14 @@ static bool check_linear(struct tdb_context *tdb,
 				len = dead_space(tdb, off);
 				len = dead_space(tdb, off);
 				if (len < sizeof(rec.r)) {
 				if (len < sizeof(rec.r)) {
 					tdb_logerr(tdb, TDB_ERR_CORRUPT,
 					tdb_logerr(tdb, TDB_ERR_CORRUPT,
-						   TDB_DEBUG_ERROR,
+						   TDB_LOG_ERROR,
 						   "tdb_check: invalid dead"
 						   "tdb_check: invalid dead"
 						   " space at %zu",
 						   " space at %zu",
 						   (size_t)off);
 						   (size_t)off);
 					return false;
 					return false;
 				}
 				}
 
 
-				tdb_logerr(tdb, TDB_SUCCESS, TDB_DEBUG_WARNING,
+				tdb_logerr(tdb, TDB_SUCCESS, TDB_LOG_WARNING,
 					   "Dead space at %zu-%zu (of %zu)",
 					   "Dead space at %zu-%zu (of %zu)",
 					   (size_t)off, (size_t)(off + len),
 					   (size_t)off, (size_t)(off + len),
 					   (size_t)tdb->map_size);
 					   (size_t)tdb->map_size);
@@ -569,7 +569,7 @@ static bool check_linear(struct tdb_context *tdb,
 				return false;
 				return false;
 			if (recovery != off) {
 			if (recovery != off) {
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					   "tdb_check: unexpected recovery"
 					   "tdb_check: unexpected recovery"
 					   " record at offset %zu",
 					   " record at offset %zu",
 					   (size_t)off);
 					   (size_t)off);
@@ -577,14 +577,14 @@ static bool check_linear(struct tdb_context *tdb,
 			}
 			}
 			if (rec.r.len > rec.r.max_len) {
 			if (rec.r.len > rec.r.max_len) {
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					   "tdb_check: invalid recovery length"
 					   "tdb_check: invalid recovery length"
 					   " %zu", (size_t)rec.r.len);
 					   " %zu", (size_t)rec.r.len);
 				return false;
 				return false;
 			}
 			}
 			if (rec.r.eof > tdb->map_size) {
 			if (rec.r.eof > tdb->map_size) {
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					   "tdb_check: invalid old EOF"
 					   "tdb_check: invalid old EOF"
 					   " %zu", (size_t)rec.r.eof);
 					   " %zu", (size_t)rec.r.eof);
 				return false;
 				return false;
@@ -595,7 +595,7 @@ static bool check_linear(struct tdb_context *tdb,
 			len = sizeof(rec.u) + frec_len(&rec.f);
 			len = sizeof(rec.u) + frec_len(&rec.f);
 			if (off + len > tdb->map_size) {
 			if (off + len > tdb->map_size) {
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					   "tdb_check: free overlength %llu"
 					   "tdb_check: free overlength %llu"
 					   " at offset %llu",
 					   " at offset %llu",
 					   (long long)len, (long long)off);
 					   (long long)len, (long long)off);
@@ -605,7 +605,7 @@ static bool check_linear(struct tdb_context *tdb,
 			if (frec_ftable(&rec.f) != TDB_FTABLE_NONE
 			if (frec_ftable(&rec.f) != TDB_FTABLE_NONE
 			    && !append(fr, num_free, off)) {
 			    && !append(fr, num_free, off)) {
 				tdb_logerr(tdb, TDB_ERR_OOM,
 				tdb_logerr(tdb, TDB_ERR_OOM,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					   "tdb_check: tracking %zu'th"
 					   "tdb_check: tracking %zu'th"
 					   " free record.", *num_free);
 					   " free record.", *num_free);
 				return false;
 				return false;
@@ -619,7 +619,7 @@ static bool check_linear(struct tdb_context *tdb,
 			/* This record is used! */
 			/* This record is used! */
 			if (!append(used, num_used, off)) {
 			if (!append(used, num_used, off)) {
 				tdb_logerr(tdb, TDB_ERR_OOM,
 				tdb_logerr(tdb, TDB_ERR_OOM,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					   "tdb_check: tracking %zu'th"
 					   "tdb_check: tracking %zu'th"
 					   " used record.", *num_used);
 					   " used record.", *num_used);
 				return false;
 				return false;
@@ -632,7 +632,7 @@ static bool check_linear(struct tdb_context *tdb,
 			len = sizeof(rec.u) + klen + dlen + extra;
 			len = sizeof(rec.u) + klen + dlen + extra;
 			if (off + len > tdb->map_size) {
 			if (off + len > tdb->map_size) {
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					   "tdb_check: used overlength %llu"
 					   "tdb_check: used overlength %llu"
 					   " at offset %llu",
 					   " at offset %llu",
 					   (long long)len, (long long)off);
 					   (long long)len, (long long)off);
@@ -641,7 +641,7 @@ static bool check_linear(struct tdb_context *tdb,
 
 
 			if (len < sizeof(rec.f)) {
 			if (len < sizeof(rec.f)) {
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
-					   TDB_DEBUG_ERROR,
+					   TDB_LOG_ERROR,
 					   "tdb_check: too short record %llu"
 					   "tdb_check: too short record %llu"
 					   " at %llu",
 					   " at %llu",
 					   (long long)len, (long long)off);
 					   (long long)len, (long long)off);
@@ -649,7 +649,7 @@ static bool check_linear(struct tdb_context *tdb,
 			}
 			}
 		} else {
 		} else {
 			tdb_logerr(tdb, TDB_ERR_CORRUPT,
 			tdb_logerr(tdb, TDB_ERR_CORRUPT,
-				   TDB_DEBUG_ERROR,
+				   TDB_LOG_ERROR,
 				   "tdb_check: Bad magic 0x%llx at offset %zu",
 				   "tdb_check: Bad magic 0x%llx at offset %zu",
 				   (long long)rec_magic(&rec.u), (size_t)off);
 				   (long long)rec_magic(&rec.u), (size_t)off);
 			return false;
 			return false;
@@ -658,7 +658,7 @@ static bool check_linear(struct tdb_context *tdb,
 
 
 	/* We must have found recovery area if there was one. */
 	/* We must have found recovery area if there was one. */
 	if (recovery != 0 && !found_recovery) {
 	if (recovery != 0 && !found_recovery) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "tdb_check: expected a recovery area at %zu",
 			   "tdb_check: expected a recovery area at %zu",
 			   (size_t)recovery);
 			   (size_t)recovery);
 		return false;
 		return false;
@@ -703,7 +703,7 @@ int tdb_check(struct tdb_context *tdb,
 		goto fail;
 		goto fail;
 
 
 	if (num_found != num_free) {
 	if (num_found != num_free) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "tdb_check: Not all entries are in free table");
 			   "tdb_check: Not all entries are in free table");
 		return -1;
 		return -1;
 	}
 	}

+ 7 - 7
ccan/tdb2/free.c

@@ -118,7 +118,7 @@ static int remove_from_list(struct tdb_context *tdb,
 
 
 #ifdef CCAN_TDB2_DEBUG
 #ifdef CCAN_TDB2_DEBUG
 	if (tdb_read_off(tdb, off) != r_off) {
 	if (tdb_read_off(tdb, off) != r_off) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			 "remove_from_list: %llu bad prev in list %llu",
 			 "remove_from_list: %llu bad prev in list %llu",
 			 (long long)r_off, (long long)b_off);
 			 (long long)r_off, (long long)b_off);
 		return -1;
 		return -1;
@@ -136,7 +136,7 @@ static int remove_from_list(struct tdb_context *tdb,
 
 
 #ifdef CCAN_TDB2_DEBUG
 #ifdef CCAN_TDB2_DEBUG
 		if (tdb_read_off(tdb, off) & TDB_OFF_MASK != r_off) {
 		if (tdb_read_off(tdb, off) & TDB_OFF_MASK != r_off) {
-			tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 				   "remove_from_list: %llu bad list %llu",
 				   "remove_from_list: %llu bad list %llu",
 				   (long long)r_off, (long long)b_off);
 				   (long long)r_off, (long long)b_off);
 			return -1;
 			return -1;
@@ -176,7 +176,7 @@ static int enqueue_in_free(struct tdb_context *tdb,
 				 new.next + offsetof(struct tdb_free_record,
 				 new.next + offsetof(struct tdb_free_record,
 						     magic_and_prev))
 						     magic_and_prev))
 		    != magic) {
 		    != magic) {
-			tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 				   "enqueue_in_free: %llu bad head"
 				   "enqueue_in_free: %llu bad head"
 				   " prev %llu",
 				   " prev %llu",
 				   (long long)new.next, (long long)b_off);
 				   (long long)new.next, (long long)b_off);
@@ -333,7 +333,7 @@ static int coalesce(struct tdb_context *tdb,
 		goto err;
 		goto err;
 
 
 	if (frec_len(&rec) != data_len) {
 	if (frec_len(&rec) != data_len) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "coalesce: expected data len %zu not %zu",
 			   "coalesce: expected data len %zu not %zu",
 			   (size_t)data_len, (size_t)frec_len(&rec));
 			   (size_t)data_len, (size_t)frec_len(&rec));
 		goto err;
 		goto err;
@@ -414,7 +414,7 @@ again:
 
 
 		if (frec_magic(r) != TDB_FREE_MAGIC) {
 		if (frec_magic(r) != TDB_FREE_MAGIC) {
 			tdb_access_release(tdb, r);
 			tdb_access_release(tdb, r);
-			tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 				 "lock_and_alloc: %llu non-free 0x%llx",
 				 "lock_and_alloc: %llu non-free 0x%llx",
 				 (long long)off, (long long)r->magic_and_prev);
 				 (long long)off, (long long)r->magic_and_prev);
 			goto unlock_err;
 			goto unlock_err;
@@ -567,7 +567,7 @@ int set_header(struct tdb_context *tdb,
 	if (rec_key_length(rec) != keylen
 	if (rec_key_length(rec) != keylen
 	    || rec_data_length(rec) != datalen
 	    || rec_data_length(rec) != datalen
 	    || rec_extra_padding(rec) != actuallen - (keylen + datalen)) {
 	    || rec_extra_padding(rec) != actuallen - (keylen + datalen)) {
-		tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 			 "Could not encode k=%llu,d=%llu,a=%llu",
 			 "Could not encode k=%llu,d=%llu,a=%llu",
 			 (long long)keylen, (long long)datalen,
 			 (long long)keylen, (long long)datalen,
 			 (long long)actuallen);
 			 (long long)actuallen);
@@ -588,7 +588,7 @@ static int tdb_expand(struct tdb_context *tdb, tdb_len_t size)
 	/* Need to hold a hash lock to expand DB: transactions rely on it. */
 	/* Need to hold a hash lock to expand DB: transactions rely on it. */
 	if (!(tdb->flags & TDB_NOLOCK)
 	if (!(tdb->flags & TDB_NOLOCK)
 	    && !tdb->allrecord_lock.count && !tdb_has_hash_locks(tdb)) {
 	    && !tdb->allrecord_lock.count && !tdb_has_hash_locks(tdb)) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 			   "tdb_expand: must hold lock during expand");
 			   "tdb_expand: must hold lock during expand");
 		return -1;
 		return -1;
 	}
 	}

+ 1 - 1
ccan/tdb2/hash.c

@@ -704,7 +704,7 @@ int next_in_hash(struct tdb_context *tdb, int ltype,
 			}
 			}
 			if (rec_magic(&rec) != TDB_USED_MAGIC) {
 			if (rec_magic(&rec) != TDB_USED_MAGIC) {
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
 				tdb_logerr(tdb, TDB_ERR_CORRUPT,
-					   TDB_DEBUG_FATAL,
+					   TDB_LOG_ERROR,
 					   "next_in_hash:"
 					   "next_in_hash:"
 					   " corrupt record at %llu",
 					   " corrupt record at %llu",
 					   (long long)off);
 					   (long long)off);

+ 14 - 14
ccan/tdb2/io.c

@@ -56,7 +56,7 @@ void tdb_mmap(struct tdb_context *tdb)
 	 */
 	 */
 	if (tdb->map_ptr == MAP_FAILED) {
 	if (tdb->map_ptr == MAP_FAILED) {
 		tdb->map_ptr = NULL;
 		tdb->map_ptr = NULL;
-		tdb_logerr(tdb, TDB_SUCCESS, TDB_DEBUG_WARNING,
+		tdb_logerr(tdb, TDB_SUCCESS, TDB_LOG_WARNING,
 			   "tdb_mmap failed for size %lld (%s)",
 			   "tdb_mmap failed for size %lld (%s)",
 			   (long long)tdb->map_size, strerror(errno));
 			   (long long)tdb->map_size, strerror(errno));
 	}
 	}
@@ -80,7 +80,7 @@ static int tdb_oob(struct tdb_context *tdb, tdb_off_t len, bool probe)
 		return 0;
 		return 0;
 	if (tdb->flags & TDB_INTERNAL) {
 	if (tdb->flags & TDB_INTERNAL) {
 		if (!probe) {
 		if (!probe) {
-			tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 				 "tdb_oob len %lld beyond internal"
 				 "tdb_oob len %lld beyond internal"
 				 " malloc size %lld",
 				 " malloc size %lld",
 				 (long long)len,
 				 (long long)len,
@@ -93,7 +93,7 @@ static int tdb_oob(struct tdb_context *tdb, tdb_off_t len, bool probe)
 		return -1;
 		return -1;
 
 
 	if (fstat(tdb->fd, &st) != 0) {
 	if (fstat(tdb->fd, &st) != 0) {
-		tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 			   "Failed to fstat file: %s", strerror(errno));
 			   "Failed to fstat file: %s", strerror(errno));
 		tdb_unlock_expand(tdb, F_RDLCK);
 		tdb_unlock_expand(tdb, F_RDLCK);
 		return -1;
 		return -1;
@@ -103,7 +103,7 @@ static int tdb_oob(struct tdb_context *tdb, tdb_off_t len, bool probe)
 
 
 	if (st.st_size < (size_t)len) {
 	if (st.st_size < (size_t)len) {
 		if (!probe) {
 		if (!probe) {
-			tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 				   "tdb_oob len %zu beyond eof at %zu",
 				   "tdb_oob len %zu beyond eof at %zu",
 				   (size_t)len, st.st_size);
 				   (size_t)len, st.st_size);
 		}
 		}
@@ -211,7 +211,7 @@ static int tdb_write(struct tdb_context *tdb, tdb_off_t off,
 		     const void *buf, tdb_len_t len)
 		     const void *buf, tdb_len_t len)
 {
 {
 	if (tdb->read_only) {
 	if (tdb->read_only) {
-		tdb_logerr(tdb, TDB_ERR_RDONLY, TDB_DEBUG_WARNING,
+		tdb_logerr(tdb, TDB_ERR_RDONLY, TDB_LOG_USE_ERROR,
 			   "Write to read-only database");
 			   "Write to read-only database");
 		return -1;
 		return -1;
 	}
 	}
@@ -234,7 +234,7 @@ static int tdb_write(struct tdb_context *tdb, tdb_off_t off,
 			if (ret >= 0)
 			if (ret >= 0)
 				errno = ENOSPC;
 				errno = ENOSPC;
 
 
-			tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 				   "tdb_write: %zi at %zu len=%zu (%s)",
 				   "tdb_write: %zi at %zu len=%zu (%s)",
 				   ret, (size_t)off, (size_t)len,
 				   ret, (size_t)off, (size_t)len,
 				   strerror(errno));
 				   strerror(errno));
@@ -257,7 +257,7 @@ static int tdb_read(struct tdb_context *tdb, tdb_off_t off, void *buf,
 	} else {
 	} else {
 		ssize_t r = pread(tdb->fd, buf, len, off);
 		ssize_t r = pread(tdb->fd, buf, len, off);
 		if (r != len) {
 		if (r != len) {
-			tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 				   "tdb_read failed with %zi at %zu "
 				   "tdb_read failed with %zi at %zu "
 				   "len=%zu (%s) map_size=%zu",
 				   "len=%zu (%s) map_size=%zu",
 				   r, (size_t)off, (size_t)len,
 				   r, (size_t)off, (size_t)len,
@@ -276,7 +276,7 @@ int tdb_write_convert(struct tdb_context *tdb, tdb_off_t off,
 	if (unlikely((tdb->flags & TDB_CONVERT))) {
 	if (unlikely((tdb->flags & TDB_CONVERT))) {
 		void *conv = malloc(len);
 		void *conv = malloc(len);
 		if (!conv) {
 		if (!conv) {
-			tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
 				   "tdb_write: no memory converting"
 				   "tdb_write: no memory converting"
 				   " %zu bytes", len);
 				   " %zu bytes", len);
 			return -1;
 			return -1;
@@ -302,7 +302,7 @@ int tdb_read_convert(struct tdb_context *tdb, tdb_off_t off,
 int tdb_write_off(struct tdb_context *tdb, tdb_off_t off, tdb_off_t val)
 int tdb_write_off(struct tdb_context *tdb, tdb_off_t off, tdb_off_t val)
 {
 {
 	if (tdb->read_only) {
 	if (tdb->read_only) {
-		tdb_logerr(tdb, TDB_ERR_RDONLY, TDB_DEBUG_WARNING,
+		tdb_logerr(tdb, TDB_ERR_RDONLY, TDB_LOG_USE_ERROR,
 			   "Write to read-only database");
 			   "Write to read-only database");
 		return -1;
 		return -1;
 	}
 	}
@@ -326,7 +326,7 @@ static void *_tdb_alloc_read(struct tdb_context *tdb, tdb_off_t offset,
 	/* some systems don't like zero length malloc */
 	/* some systems don't like zero length malloc */
 	buf = malloc(prefix + len ? prefix + len : 1);
 	buf = malloc(prefix + len ? prefix + len : 1);
 	if (!buf) {
 	if (!buf) {
-		tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_USE_ERROR,
 			   "tdb_alloc_read malloc failed len=%zu",
 			   "tdb_alloc_read malloc failed len=%zu",
 			   (size_t)(prefix + len));
 			   (size_t)(prefix + len));
 	} else if (unlikely(tdb->methods->tread(tdb, offset, buf+prefix, len)
 	} else if (unlikely(tdb->methods->tread(tdb, offset, buf+prefix, len)
@@ -354,7 +354,7 @@ static int fill(struct tdb_context *tdb,
 			if (ret >= 0)
 			if (ret >= 0)
 				errno = ENOSPC;
 				errno = ENOSPC;
 
 
-			tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 				   "fill failed: %zi at %zu len=%zu (%s)",
 				   "fill failed: %zi at %zu len=%zu (%s)",
 				   ret, (size_t)off, (size_t)len,
 				   ret, (size_t)off, (size_t)len,
 				   strerror(errno));
 				   strerror(errno));
@@ -373,7 +373,7 @@ static int tdb_expand_file(struct tdb_context *tdb, tdb_len_t addition)
 	char buf[8192];
 	char buf[8192];
 
 
 	if (tdb->read_only) {
 	if (tdb->read_only) {
-		tdb_logerr(tdb, TDB_ERR_RDONLY, TDB_DEBUG_WARNING,
+		tdb_logerr(tdb, TDB_ERR_RDONLY, TDB_LOG_USE_ERROR,
 			   "Expand on read-only database");
 			   "Expand on read-only database");
 		return -1;
 		return -1;
 	}
 	}
@@ -381,7 +381,7 @@ static int tdb_expand_file(struct tdb_context *tdb, tdb_len_t addition)
 	if (tdb->flags & TDB_INTERNAL) {
 	if (tdb->flags & TDB_INTERNAL) {
 		char *new = realloc(tdb->map_ptr, tdb->map_size + addition);
 		char *new = realloc(tdb->map_ptr, tdb->map_size + addition);
 		if (!new) {
 		if (!new) {
-			tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
 				   "No memory to expand database");
 				   "No memory to expand database");
 			return -1;
 			return -1;
 		}
 		}
@@ -438,7 +438,7 @@ void *tdb_access_write(struct tdb_context *tdb,
 	void *ret = NULL;
 	void *ret = NULL;
 
 
 	if (tdb->read_only) {
 	if (tdb->read_only) {
-		tdb_logerr(tdb, TDB_ERR_RDONLY, TDB_DEBUG_WARNING,
+		tdb_logerr(tdb, TDB_ERR_RDONLY, TDB_LOG_USE_ERROR,
 			   "Write to read-only database");
 			   "Write to read-only database");
 		return NULL;
 		return NULL;
 	}
 	}

+ 26 - 26
ccan/tdb2/lock.c

@@ -135,7 +135,7 @@ static int tdb_brlock(struct tdb_context *tdb,
 	}
 	}
 
 
 	if (rw_type == F_WRLCK && tdb->read_only) {
 	if (rw_type == F_WRLCK && tdb->read_only) {
-		tdb_logerr(tdb, TDB_ERR_RDONLY, TDB_DEBUG_WARNING,
+		tdb_logerr(tdb, TDB_ERR_RDONLY, TDB_LOG_USE_ERROR,
 			   "Write lock attempted on read-only database");
 			   "Write lock attempted on read-only database");
 		return -1;
 		return -1;
 	}
 	}
@@ -143,7 +143,7 @@ static int tdb_brlock(struct tdb_context *tdb,
 	/* A 32 bit system cannot open a 64-bit file, but it could have
 	/* A 32 bit system cannot open a 64-bit file, but it could have
 	 * expanded since then: check here. */
 	 * expanded since then: check here. */
 	if ((size_t)(offset + len) != offset + len) {
 	if ((size_t)(offset + len) != offset + len) {
-		tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 			 "tdb_brlock: lock on giant offset %llu",
 			 "tdb_brlock: lock on giant offset %llu",
 			 (long long)(offset + len));
 			 (long long)(offset + len));
 		return -1;
 		return -1;
@@ -160,7 +160,7 @@ static int tdb_brlock(struct tdb_context *tdb,
 		 * EAGAIN is an expected return from non-blocking
 		 * EAGAIN is an expected return from non-blocking
 		 * locks. */
 		 * locks. */
 		if (!(flags & TDB_LOCK_PROBE) && errno != EAGAIN) {
 		if (!(flags & TDB_LOCK_PROBE) && errno != EAGAIN) {
-			tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+			tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 				   "tdb_brlock failed (fd=%d) at"
 				   "tdb_brlock failed (fd=%d) at"
 				   " offset %zu rw_type=%d flags=%d len=%zu:"
 				   " offset %zu rw_type=%d flags=%d len=%zu:"
 				   " %s",
 				   " %s",
@@ -186,7 +186,7 @@ static int tdb_brunlock(struct tdb_context *tdb,
 	} while (ret == -1 && errno == EINTR);
 	} while (ret == -1 && errno == EINTR);
 
 
 	if (ret == -1) {
 	if (ret == -1) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 			   "tdb_brunlock failed (fd=%d) at offset %zu"
 			   "tdb_brunlock failed (fd=%d) at offset %zu"
 			   " rw_type=%d len=%zu",
 			   " rw_type=%d len=%zu",
 			   tdb->fd, (size_t)offset, rw_type, (size_t)len);
 			   tdb->fd, (size_t)offset, rw_type, (size_t)len);
@@ -205,14 +205,14 @@ int tdb_allrecord_upgrade(struct tdb_context *tdb)
 	int count = 1000;
 	int count = 1000;
 
 
 	if (tdb->allrecord_lock.count != 1) {
 	if (tdb->allrecord_lock.count != 1) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 			   "tdb_allrecord_upgrade failed: count %u too high",
 			   "tdb_allrecord_upgrade failed: count %u too high",
 			   tdb->allrecord_lock.count);
 			   tdb->allrecord_lock.count);
 		return -1;
 		return -1;
 	}
 	}
 
 
 	if (tdb->allrecord_lock.off != 1) {
 	if (tdb->allrecord_lock.off != 1) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 			   "tdb_allrecord_upgrade failed: already upgraded?");
 			   "tdb_allrecord_upgrade failed: already upgraded?");
 		return -1;
 		return -1;
 	}
 	}
@@ -234,7 +234,7 @@ int tdb_allrecord_upgrade(struct tdb_context *tdb)
 		tv.tv_usec = 1;
 		tv.tv_usec = 1;
 		select(0, NULL, NULL, NULL, &tv);
 		select(0, NULL, NULL, NULL, &tv);
 	}
 	}
-	tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+	tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 		   "tdb_allrecord_upgrade failed");
 		   "tdb_allrecord_upgrade failed");
 	return -1;
 	return -1;
 }
 }
@@ -280,7 +280,7 @@ static int tdb_nest_lock(struct tdb_context *tdb, tdb_off_t offset, int ltype,
 	struct tdb_lock_type *new_lck;
 	struct tdb_lock_type *new_lck;
 
 
 	if (offset > TDB_HASH_LOCK_START + TDB_HASH_LOCK_RANGE + tdb->map_size / 8) {
 	if (offset > TDB_HASH_LOCK_START + TDB_HASH_LOCK_RANGE + tdb->map_size / 8) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 			   "tdb_nest_lock: invalid offset %zu ltype=%d",
 			   "tdb_nest_lock: invalid offset %zu ltype=%d",
 			   (size_t)offset, ltype);
 			   (size_t)offset, ltype);
 		return -1;
 		return -1;
@@ -294,7 +294,7 @@ static int tdb_nest_lock(struct tdb_context *tdb, tdb_off_t offset, int ltype,
 	new_lck = find_nestlock(tdb, offset);
 	new_lck = find_nestlock(tdb, offset);
 	if (new_lck) {
 	if (new_lck) {
 		if (new_lck->ltype == F_RDLCK && ltype == F_WRLCK) {
 		if (new_lck->ltype == F_RDLCK && ltype == F_WRLCK) {
-			tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 				   "tdb_nest_lock: offset %zu has read lock",
 				   "tdb_nest_lock: offset %zu has read lock",
 				   (size_t)offset);
 				   (size_t)offset);
 			return -1;
 			return -1;
@@ -307,7 +307,7 @@ static int tdb_nest_lock(struct tdb_context *tdb, tdb_off_t offset, int ltype,
 	if (tdb->num_lockrecs
 	if (tdb->num_lockrecs
 	    && offset >= TDB_HASH_LOCK_START
 	    && offset >= TDB_HASH_LOCK_START
 	    && offset < TDB_HASH_LOCK_START + TDB_HASH_LOCK_RANGE) {
 	    && offset < TDB_HASH_LOCK_START + TDB_HASH_LOCK_RANGE) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 			   "tdb_nest_lock: already have a hash lock?");
 			   "tdb_nest_lock: already have a hash lock?");
 		return -1;
 		return -1;
 	}
 	}
@@ -316,7 +316,7 @@ static int tdb_nest_lock(struct tdb_context *tdb, tdb_off_t offset, int ltype,
 		tdb->lockrecs,
 		tdb->lockrecs,
 		sizeof(*tdb->lockrecs) * (tdb->num_lockrecs+1));
 		sizeof(*tdb->lockrecs) * (tdb->num_lockrecs+1));
 	if (new_lck == NULL) {
 	if (new_lck == NULL) {
-		tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
 			 "tdb_nest_lock: unable to allocate %zu lock struct",
 			 "tdb_nest_lock: unable to allocate %zu lock struct",
 			 tdb->num_lockrecs + 1);
 			 tdb->num_lockrecs + 1);
 		errno = ENOMEM;
 		errno = ENOMEM;
@@ -363,7 +363,7 @@ static int tdb_nest_unlock(struct tdb_context *tdb, tdb_off_t off, int ltype)
 
 
 	lck = find_nestlock(tdb, off);
 	lck = find_nestlock(tdb, off);
 	if ((lck == NULL) || (lck->count == 0)) {
 	if ((lck == NULL) || (lck->count == 0)) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 			   "tdb_nest_unlock: no lock for %zu", (size_t)off);
 			   "tdb_nest_unlock: no lock for %zu", (size_t)off);
 		return -1;
 		return -1;
 	}
 	}
@@ -449,7 +449,7 @@ int tdb_allrecord_lock(struct tdb_context *tdb, int ltype,
 {
 {
 	/* FIXME: There are no locks on read-only dbs */
 	/* FIXME: There are no locks on read-only dbs */
 	if (tdb->read_only) {
 	if (tdb->read_only) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_USE_ERROR,
 			   "tdb_allrecord_lock: read-only");
 			   "tdb_allrecord_lock: read-only");
 		return -1;
 		return -1;
 	}
 	}
@@ -462,7 +462,7 @@ int tdb_allrecord_lock(struct tdb_context *tdb, int ltype,
 
 
 	if (tdb->allrecord_lock.count) {
 	if (tdb->allrecord_lock.count) {
 		/* a global lock of a different type exists */
 		/* a global lock of a different type exists */
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_USE_ERROR,
 			   "tdb_allrecord_lock: already have %s lock",
 			   "tdb_allrecord_lock: already have %s lock",
 			   tdb->allrecord_lock.ltype == F_RDLCK
 			   tdb->allrecord_lock.ltype == F_RDLCK
 			   ? "read" : "write");
 			   ? "read" : "write");
@@ -471,14 +471,14 @@ int tdb_allrecord_lock(struct tdb_context *tdb, int ltype,
 
 
 	if (tdb_has_hash_locks(tdb)) {
 	if (tdb_has_hash_locks(tdb)) {
 		/* can't combine global and chain locks */
 		/* can't combine global and chain locks */
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_USE_ERROR,
 			 "tdb_allrecord_lock: already have chain lock");
 			 "tdb_allrecord_lock: already have chain lock");
 		return -1;
 		return -1;
 	}
 	}
 
 
 	if (upgradable && ltype != F_RDLCK) {
 	if (upgradable && ltype != F_RDLCK) {
 		/* tdb error: you can't upgrade a write lock! */
 		/* tdb error: you can't upgrade a write lock! */
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 			   "tdb_allrecord_lock: can't upgrade a write lock");
 			   "tdb_allrecord_lock: can't upgrade a write lock");
 		return -1;
 		return -1;
 	}
 	}
@@ -489,7 +489,7 @@ again:
 	if (tdb_lock_gradual(tdb, ltype, flags, TDB_HASH_LOCK_START,
 	if (tdb_lock_gradual(tdb, ltype, flags, TDB_HASH_LOCK_START,
 			     TDB_HASH_LOCK_RANGE)) {
 			     TDB_HASH_LOCK_RANGE)) {
 		if (!(flags & TDB_LOCK_PROBE)) {
 		if (!(flags & TDB_LOCK_PROBE)) {
-			tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_ERROR,
+			tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 				   "tdb_allrecord_lock hashes failed");
 				   "tdb_allrecord_lock hashes failed");
 		}
 		}
 		return -1;
 		return -1;
@@ -499,7 +499,7 @@ again:
 	if (tdb_brlock(tdb, ltype, TDB_HASH_LOCK_START + TDB_HASH_LOCK_RANGE,
 	if (tdb_brlock(tdb, ltype, TDB_HASH_LOCK_START + TDB_HASH_LOCK_RANGE,
 		       0, flags)) {
 		       0, flags)) {
 		if (!(flags & TDB_LOCK_PROBE)) {
 		if (!(flags & TDB_LOCK_PROBE)) {
-			tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_ERROR,
+			tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 				 "tdb_allrecord_lock freetables failed");
 				 "tdb_allrecord_lock freetables failed");
 		}
 		}
 		tdb_brunlock(tdb, ltype, TDB_HASH_LOCK_START,
 		tdb_brunlock(tdb, ltype, TDB_HASH_LOCK_START,
@@ -556,7 +556,7 @@ void tdb_unlock_expand(struct tdb_context *tdb, int ltype)
 int tdb_allrecord_unlock(struct tdb_context *tdb, int ltype)
 int tdb_allrecord_unlock(struct tdb_context *tdb, int ltype)
 {
 {
 	if (tdb->allrecord_lock.count == 0) {
 	if (tdb->allrecord_lock.count == 0) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_USE_ERROR,
 			   "tdb_allrecord_unlock: not locked!");
 			   "tdb_allrecord_unlock: not locked!");
 		return -1;
 		return -1;
 	}
 	}
@@ -564,7 +564,7 @@ int tdb_allrecord_unlock(struct tdb_context *tdb, int ltype)
 	/* Upgradable locks are marked as write locks. */
 	/* Upgradable locks are marked as write locks. */
 	if (tdb->allrecord_lock.ltype != ltype
 	if (tdb->allrecord_lock.ltype != ltype
 	    && (!tdb->allrecord_lock.off || ltype != F_RDLCK)) {
 	    && (!tdb->allrecord_lock.off || ltype != F_RDLCK)) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 			 "tdb_allrecord_unlock: have %s lock",
 			 "tdb_allrecord_unlock: have %s lock",
 			   tdb->allrecord_lock.ltype == F_RDLCK
 			   tdb->allrecord_lock.ltype == F_RDLCK
 			   ? "read" : "write");
 			   ? "read" : "write");
@@ -628,7 +628,7 @@ int tdb_lock_hashes(struct tdb_context *tdb,
 	}
 	}
 
 
 	if (tdb->allrecord_lock.count) {
 	if (tdb->allrecord_lock.count) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_USE_ERROR,
 			   "tdb_lock_hashes: already have %s allrecordlock",
 			   "tdb_lock_hashes: already have %s allrecordlock",
 			   tdb->allrecord_lock.ltype == F_RDLCK
 			   tdb->allrecord_lock.ltype == F_RDLCK
 			   ? "read" : "write");
 			   ? "read" : "write");
@@ -636,13 +636,13 @@ int tdb_lock_hashes(struct tdb_context *tdb,
 	}
 	}
 
 
 	if (tdb_has_free_lock(tdb)) {
 	if (tdb_has_free_lock(tdb)) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 			   "tdb_lock_hashes: already have free lock");
 			   "tdb_lock_hashes: already have free lock");
 		return -1;
 		return -1;
 	}
 	}
 
 
 	if (tdb_has_expansion_lock(tdb)) {
 	if (tdb_has_expansion_lock(tdb)) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 			   "tdb_lock_hashes: already have expansion lock");
 			   "tdb_lock_hashes: already have expansion lock");
 		return -1;
 		return -1;
 	}
 	}
@@ -661,7 +661,7 @@ int tdb_unlock_hashes(struct tdb_context *tdb,
 	if (tdb->allrecord_lock.count) {
 	if (tdb->allrecord_lock.count) {
 		if (tdb->allrecord_lock.ltype == F_RDLCK
 		if (tdb->allrecord_lock.ltype == F_RDLCK
 		    && ltype == F_WRLCK) {
 		    && ltype == F_WRLCK) {
-			tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 				   "tdb_unlock_hashes RO allrecord!");
 				   "tdb_unlock_hashes RO allrecord!");
 			return -1;
 			return -1;
 		}
 		}
@@ -691,14 +691,14 @@ int tdb_lock_free_bucket(struct tdb_context *tdb, tdb_off_t b_off,
 	if (tdb->allrecord_lock.count) {
 	if (tdb->allrecord_lock.count) {
 		if (tdb->allrecord_lock.ltype == F_WRLCK)
 		if (tdb->allrecord_lock.ltype == F_WRLCK)
 			return 0;
 			return 0;
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 			 "tdb_lock_free_bucket with RO allrecordlock!");
 			 "tdb_lock_free_bucket with RO allrecordlock!");
 		return -1;
 		return -1;
 	}
 	}
 
 
 #if 0 /* FIXME */
 #if 0 /* FIXME */
 	if (tdb_has_expansion_lock(tdb)) {
 	if (tdb_has_expansion_lock(tdb)) {
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_ERROR,
 			   "tdb_lock_free_bucket: already have expansion lock");
 			   "tdb_lock_free_bucket: already have expansion lock");
 		return -1;
 		return -1;
 	}
 	}

+ 5 - 2
ccan/tdb2/private.h

@@ -331,7 +331,10 @@ struct tdb_context {
 	uint32_t flags;
 	uint32_t flags;
 
 
 	/* Logging function */
 	/* Logging function */
-	tdb_logfn_t logfn;
+	void (*logfn)(struct tdb_context *tdb,
+		      enum tdb_log_level level,
+		      void *log_private,
+		      const char *message);
 	void *log_private;
 	void *log_private;
 
 
 	/* Hash function. */
 	/* Hash function. */
@@ -550,7 +553,7 @@ bool tdb_needs_recovery(struct tdb_context *tdb);
 /* tdb.c: */
 /* tdb.c: */
 void COLD tdb_logerr(struct tdb_context *tdb,
 void COLD tdb_logerr(struct tdb_context *tdb,
 		     enum TDB_ERROR ecode,
 		     enum TDB_ERROR ecode,
-		     enum tdb_debug_level level,
+		     enum tdb_log_level level,
 		     const char *fmt, ...);
 		     const char *fmt, ...);
 
 
 #ifdef TDB_TRACE
 #ifdef TDB_TRACE

+ 1 - 1
ccan/tdb2/summary.c

@@ -175,7 +175,7 @@ char *tdb_summary(struct tdb_context *tdb, enum tdb_summary_flags flags)
 	chains = tally_new(HISTO_HEIGHT);
 	chains = tally_new(HISTO_HEIGHT);
 	if (!ftables || !hashes || !freet || !keys || !data || !extra
 	if (!ftables || !hashes || !freet || !keys || !data || !extra
 	    || !uncoal || !buckets || !chains) {
 	    || !uncoal || !buckets || !chains) {
-		tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
 			   "tdb_summary: failed to allocate tally structures");
 			   "tdb_summary: failed to allocate tally structures");
 		goto unlock;
 		goto unlock;
 	}
 	}

+ 18 - 23
ccan/tdb2/tdb.c

@@ -49,8 +49,6 @@ static uint64_t random_number(struct tdb_context *tdb)
 	fd = open("/dev/urandom", O_RDONLY);
 	fd = open("/dev/urandom", O_RDONLY);
 	if (fd >= 0) {
 	if (fd >= 0) {
 		if (read_all(fd, &ret, sizeof(ret))) {
 		if (read_all(fd, &ret, sizeof(ret))) {
-			tdb_logerr(tdb, TDB_SUCCESS, TDB_DEBUG_TRACE,
-				 "tdb_open: random from /dev/urandom");
 			close(fd);
 			close(fd);
 			return ret;
 			return ret;
 		}
 		}
@@ -65,9 +63,6 @@ static uint64_t random_number(struct tdb_context *tdb)
 			char reply[1 + sizeof(uint64_t)];
 			char reply[1 + sizeof(uint64_t)];
 			int r = read(fd, reply, sizeof(reply));
 			int r = read(fd, reply, sizeof(reply));
 			if (r > 1) {
 			if (r > 1) {
-				tdb_logerr(tdb, TDB_SUCCESS, TDB_DEBUG_TRACE,
-					   "tdb_open: %u random bytes from"
-					   " /dev/egd-pool", r-1);
 				/* Copy at least some bytes. */
 				/* Copy at least some bytes. */
 				memcpy(&ret, reply+1, r - 1);
 				memcpy(&ret, reply+1, r - 1);
 				if (reply[0] == sizeof(uint64_t)
 				if (reply[0] == sizeof(uint64_t)
@@ -83,7 +78,7 @@ static uint64_t random_number(struct tdb_context *tdb)
 	/* Fallback: pid and time. */
 	/* Fallback: pid and time. */
 	gettimeofday(&now, NULL);
 	gettimeofday(&now, NULL);
 	ret = getpid() * 100132289ULL + now.tv_sec * 1000000ULL + now.tv_usec;
 	ret = getpid() * 100132289ULL + now.tv_sec * 1000000ULL + now.tv_usec;
-	tdb_logerr(tdb, TDB_SUCCESS, TDB_DEBUG_TRACE,
+	tdb_logerr(tdb, TDB_SUCCESS, TDB_LOG_WARNING,
 		   "tdb_open: random from getpid and time");
 		   "tdb_open: random from getpid and time");
 	return ret;
 	return ret;
 }
 }
@@ -141,7 +136,7 @@ static int tdb_new_database(struct tdb_context *tdb,
 		tdb->map_size = sizeof(newdb);
 		tdb->map_size = sizeof(newdb);
 		tdb->map_ptr = malloc(tdb->map_size);
 		tdb->map_ptr = malloc(tdb->map_size);
 		if (!tdb->map_ptr) {
 		if (!tdb->map_ptr) {
-			tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
 				   "tdb_new_database: failed to allocate");
 				   "tdb_new_database: failed to allocate");
 			return -1;
 			return -1;
 		}
 		}
@@ -158,7 +153,7 @@ static int tdb_new_database(struct tdb_context *tdb,
 	if (rlen != sizeof(newdb)) {
 	if (rlen != sizeof(newdb)) {
 		if (rlen >= 0)
 		if (rlen >= 0)
 			errno = ENOSPC;
 			errno = ENOSPC;
-		tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 			   "tdb_new_database: %zi writing header: %s",
 			   "tdb_new_database: %zi writing header: %s",
 			   rlen, strerror(errno));
 			   rlen, strerror(errno));
 		return -1;
 		return -1;
@@ -220,7 +215,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
 				tdb->stats->size = sizeof(attr->stats);
 				tdb->stats->size = sizeof(attr->stats);
 			break;
 			break;
 		default:
 		default:
-			tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_DEBUG_ERROR,
+			tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_USE_ERROR,
 				   "tdb_open: unknown attribute type %u",
 				   "tdb_open: unknown attribute type %u",
 				   attr->base.attr);
 				   attr->base.attr);
 			goto fail;
 			goto fail;
@@ -229,7 +224,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
 	}
 	}
 
 
 	if ((open_flags & O_ACCMODE) == O_WRONLY) {
 	if ((open_flags & O_ACCMODE) == O_WRONLY) {
-		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_USE_ERROR,
 			   "tdb_open: can't open tdb %s write-only", name);
 			   "tdb_open: can't open tdb %s write-only", name);
 		goto fail;
 		goto fail;
 	}
 	}
@@ -259,7 +254,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
 	if ((tdb->fd = open(name, open_flags, mode)) == -1) {
 	if ((tdb->fd = open(name, open_flags, mode)) == -1) {
 		/* errno set by open(2) */
 		/* errno set by open(2) */
 		saved_errno = errno;
 		saved_errno = errno;
-		tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 			   "tdb_open: could not open file %s: %s",
 			   "tdb_open: could not open file %s: %s",
 			   name, strerror(errno));
 			   name, strerror(errno));
 		goto fail;
 		goto fail;
@@ -283,13 +278,13 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
 			goto fail;
 			goto fail;
 		}
 		}
 	} else if (rlen < 0) {
 	} else if (rlen < 0) {
-		tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 			   "tdb_open: error %s reading %s",
 			   "tdb_open: error %s reading %s",
 			   strerror(errno), name);
 			   strerror(errno), name);
 		goto fail;
 		goto fail;
 	} else if (rlen < sizeof(hdr)
 	} else if (rlen < sizeof(hdr)
 		   || strcmp(hdr.magic_food, TDB_MAGIC_FOOD) != 0) {
 		   || strcmp(hdr.magic_food, TDB_MAGIC_FOOD) != 0) {
-		tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 			   "tdb_open: %s is not a tdb file", name);
 			   "tdb_open: %s is not a tdb file", name);
 		goto fail;
 		goto fail;
 	}
 	}
@@ -299,7 +294,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
 			tdb->flags |= TDB_CONVERT;
 			tdb->flags |= TDB_CONVERT;
 		else {
 		else {
 			/* wrong version */
 			/* wrong version */
-			tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_ERROR,
+			tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 				   "tdb_open: %s is unknown version 0x%llx",
 				   "tdb_open: %s is unknown version 0x%llx",
 				   name, (long long)hdr.version);
 				   name, (long long)hdr.version);
 			goto fail;
 			goto fail;
@@ -312,7 +307,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
 	hash_test = tdb_hash(tdb, &hash_test, sizeof(hash_test));
 	hash_test = tdb_hash(tdb, &hash_test, sizeof(hash_test));
 	if (hdr.hash_test != hash_test) {
 	if (hdr.hash_test != hash_test) {
 		/* wrong hash variant */
 		/* wrong hash variant */
-		tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 			   "tdb_open: %s uses a different hash function",
 			   "tdb_open: %s uses a different hash function",
 			   name);
 			   name);
 		goto fail;
 		goto fail;
@@ -320,7 +315,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
 
 
 	if (fstat(tdb->fd, &st) == -1) {
 	if (fstat(tdb->fd, &st) == -1) {
 		saved_errno = errno;
 		saved_errno = errno;
-		tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 			   "tdb_open: could not stat open %s: %s",
 			   "tdb_open: could not stat open %s: %s",
 			   name, strerror(errno));
 			   name, strerror(errno));
 		goto fail;
 		goto fail;
@@ -329,7 +324,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
 	/* Is it already in the open list?  If so, fail. */
 	/* Is it already in the open list?  If so, fail. */
 	if (tdb_already_open(st.st_dev, st.st_ino)) {
 	if (tdb_already_open(st.st_dev, st.st_ino)) {
 		/* FIXME */
 		/* FIXME */
-		tdb_logerr(tdb, TDB_ERR_NESTING, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_NESTING, TDB_LOG_USE_ERROR,
 			   "tdb_open: %s (%d,%d) is already open in this"
 			   "tdb_open: %s (%d,%d) is already open in this"
 			   " process",
 			   " process",
 			   name, (int)st.st_dev, (int)st.st_ino);
 			   name, (int)st.st_dev, (int)st.st_ino);
@@ -338,7 +333,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
 
 
 	tdb->name = strdup(name);
 	tdb->name = strdup(name);
 	if (!tdb->name) {
 	if (!tdb->name) {
-		tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
 			   "tdb_open: failed to allocate name");
 			   "tdb_open: failed to allocate name");
 		goto fail;
 		goto fail;
 	}
 	}
@@ -401,9 +396,9 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags,
 	free((char *)tdb->name);
 	free((char *)tdb->name);
 	if (tdb->fd != -1)
 	if (tdb->fd != -1)
 		if (close(tdb->fd) != 0)
 		if (close(tdb->fd) != 0)
-			tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_ERROR,
+			tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 				   "tdb_open: failed to close tdb->fd"
 				   "tdb_open: failed to close tdb->fd"
-				   " on error!");
+				   " on error: %s", strerror(errno));
 	free(tdb);
 	free(tdb);
 	errno = saved_errno;
 	errno = saved_errno;
 	return NULL;
 	return NULL;
@@ -562,7 +557,7 @@ int tdb_append(struct tdb_context *tdb,
 		/* Slow path. */
 		/* Slow path. */
 		newdata = malloc(key.dsize + old_dlen + dbuf.dsize);
 		newdata = malloc(key.dsize + old_dlen + dbuf.dsize);
 		if (!newdata) {
 		if (!newdata) {
-			tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
 				   "tdb_append: failed to allocate %zu bytes",
 				   "tdb_append: failed to allocate %zu bytes",
 				   (size_t)(key.dsize+old_dlen+dbuf.dsize));
 				   (size_t)(key.dsize+old_dlen+dbuf.dsize));
 			goto fail;
 			goto fail;
@@ -717,7 +712,7 @@ const char *tdb_errorstr(const struct tdb_context *tdb)
 
 
 void COLD tdb_logerr(struct tdb_context *tdb,
 void COLD tdb_logerr(struct tdb_context *tdb,
 		     enum TDB_ERROR ecode,
 		     enum TDB_ERROR ecode,
-		     enum tdb_debug_level level,
+		     enum tdb_log_level level,
 		     const char *fmt, ...)
 		     const char *fmt, ...)
 {
 {
 	char *message;
 	char *message;
@@ -738,7 +733,7 @@ void COLD tdb_logerr(struct tdb_context *tdb,
 
 
 	message = malloc(len + 1);
 	message = malloc(len + 1);
 	if (!message) {
 	if (!message) {
-		tdb->logfn(tdb, TDB_DEBUG_ERROR, tdb->log_private,
+		tdb->logfn(tdb, TDB_LOG_ERROR, tdb->log_private,
 			   "out of memory formatting message:");
 			   "out of memory formatting message:");
 		tdb->logfn(tdb, level, tdb->log_private, fmt);
 		tdb->logfn(tdb, level, tdb->log_private, fmt);
 		return;
 		return;

+ 5 - 4
ccan/tdb2/tdb2.h

@@ -68,8 +68,7 @@ enum TDB_ERROR {TDB_SUCCESS=0, TDB_ERR_CORRUPT, TDB_ERR_IO, TDB_ERR_LOCK,
 enum tdb_summary_flags { TDB_SUMMARY_HISTOGRAMS = 1 };
 enum tdb_summary_flags { TDB_SUMMARY_HISTOGRAMS = 1 };
 
 
 /* logging uses one of the following levels */
 /* logging uses one of the following levels */
-enum tdb_debug_level {TDB_DEBUG_FATAL = 0, TDB_DEBUG_ERROR,
-		      TDB_DEBUG_WARNING, TDB_DEBUG_TRACE};
+enum tdb_log_level {TDB_LOG_ERROR = 0, TDB_LOG_USE_ERROR, TDB_LOG_WARNING};
 
 
 typedef struct tdb_data {
 typedef struct tdb_data {
 	unsigned char *dptr;
 	unsigned char *dptr;
@@ -80,7 +79,6 @@ struct tdb_context;
 
 
 /* FIXME: Make typesafe */
 /* FIXME: Make typesafe */
 typedef int (*tdb_traverse_func)(struct tdb_context *, TDB_DATA, TDB_DATA, void *);
 typedef int (*tdb_traverse_func)(struct tdb_context *, TDB_DATA, TDB_DATA, void *);
-typedef void (*tdb_logfn_t)(struct tdb_context *, enum tdb_debug_level, void *, const char *);
 typedef uint64_t (*tdb_hashfn_t)(const void *key, size_t len, uint64_t seed,
 typedef uint64_t (*tdb_hashfn_t)(const void *key, size_t len, uint64_t seed,
 				 void *priv);
 				 void *priv);
 
 
@@ -98,7 +96,10 @@ struct tdb_attribute_base {
 
 
 struct tdb_attribute_log {
 struct tdb_attribute_log {
 	struct tdb_attribute_base base; /* .attr = TDB_ATTRIBUTE_LOG */
 	struct tdb_attribute_base base; /* .attr = TDB_ATTRIBUTE_LOG */
-	tdb_logfn_t log_fn;
+	void (*log_fn)(struct tdb_context *tdb,
+		       enum tdb_log_level level,
+		       void *log_private,
+		       const char *message);
 	void *log_private;
 	void *log_private;
 };
 };
 
 

+ 2 - 3
ccan/tdb2/test/logging.c

@@ -13,14 +13,13 @@ union tdb_attribute tap_log_attr = {
 };
 };
 
 
 void tap_log_fn(struct tdb_context *tdb,
 void tap_log_fn(struct tdb_context *tdb,
-		enum tdb_debug_level level, void *priv,
+		enum tdb_log_level level, void *priv,
 		const char *message)
 		const char *message)
 {
 {
 	if (suppress_logging)
 	if (suppress_logging)
 		return;
 		return;
 
 
 	diag("tdb log level %u: %s%s", level, log_prefix, message);
 	diag("tdb log level %u: %s%s", level, log_prefix, message);
-	if (level != TDB_DEBUG_TRACE)
-		tap_log_messages++;
+	tap_log_messages++;
 }
 }
 
 

+ 1 - 1
ccan/tdb2/test/logging.h

@@ -10,7 +10,7 @@ extern unsigned tap_log_messages;
 extern union tdb_attribute tap_log_attr;
 extern union tdb_attribute tap_log_attr;
 
 
 void tap_log_fn(struct tdb_context *tdb,
 void tap_log_fn(struct tdb_context *tdb,
-		enum tdb_debug_level level, void *priv,
+		enum tdb_log_level level, void *priv,
 		const char *message);
 		const char *message);
 
 
 static inline bool data_equal(struct tdb_data a, struct tdb_data b)
 static inline bool data_equal(struct tdb_data a, struct tdb_data b)

+ 2 - 2
ccan/tdb2/test/run-01-new_database.c

@@ -11,8 +11,8 @@
 #include "logging.h"
 #include "logging.h"
 
 
 /* FIXME: Check these! */
 /* FIXME: Check these! */
-#define INITIAL_TDB_MALLOC	"tdb.c", 182, FAILTEST_MALLOC
-#define LOGGING_MALLOC		"tdb.c", 739, FAILTEST_MALLOC
+#define INITIAL_TDB_MALLOC	"tdb.c", 177, FAILTEST_MALLOC
+#define LOGGING_MALLOC		"tdb.c", 734, FAILTEST_MALLOC
 #define URANDOM_OPEN		"tdb.c", 49, FAILTEST_OPEN
 #define URANDOM_OPEN		"tdb.c", 49, FAILTEST_OPEN
 #define URANDOM_READ		"tdb.c", 29, FAILTEST_READ
 #define URANDOM_READ		"tdb.c", 29, FAILTEST_READ
 
 

+ 1 - 1
ccan/tdb2/test/run-seed.c

@@ -12,7 +12,7 @@ static int log_count = 0;
 
 
 /* Normally we get a log when setting random seed. */
 /* Normally we get a log when setting random seed. */
 static void my_log_fn(struct tdb_context *tdb,
 static void my_log_fn(struct tdb_context *tdb,
-		      enum tdb_debug_level level, void *priv,
+		      enum tdb_log_level level, void *priv,
 		      const char *message)
 		      const char *message)
 {
 {
 	log_count++;
 	log_count++;

+ 1 - 4
ccan/tdb2/tools/tdbtorture.c

@@ -50,15 +50,12 @@ static void tdb_log(struct tdb_context *tdb, enum tdb_debug_level level, void *p
 {
 {
 	va_list ap;
 	va_list ap;
 
 
-	if (level != TDB_DEBUG_TRACE)
-		error_count++;
-
 	va_start(ap, format);
 	va_start(ap, format);
 	vfprintf(stdout, format, ap);
 	vfprintf(stdout, format, ap);
 	va_end(ap);
 	va_end(ap);
 	fflush(stdout);
 	fflush(stdout);
 #if 0
 #if 0
-	if (level != TDB_DEBUG_TRACE) {
+	{
 		char *ptr;
 		char *ptr;
 		signal(SIGUSR1, SIG_IGN);
 		signal(SIGUSR1, SIG_IGN);
 		asprintf(&ptr,"xterm -e gdb /proc/%d/exe %d", getpid(), getpid());
 		asprintf(&ptr,"xterm -e gdb /proc/%d/exe %d", getpid(), getpid());

+ 44 - 44
ccan/tdb2/transaction.c

@@ -170,7 +170,7 @@ static int transaction_read(struct tdb_context *tdb, tdb_off_t off, void *buf,
 	return 0;
 	return 0;
 
 
 fail:
 fail:
-	tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_FATAL,
+	tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 		   "transaction_read: failed at off=%zu len=%zu",
 		   "transaction_read: failed at off=%zu len=%zu",
 		   (size_t)off, (size_t)len);
 		   (size_t)off, (size_t)len);
 	tdb->transaction->transaction_error = 1;
 	tdb->transaction->transaction_error = 1;
@@ -188,7 +188,7 @@ static int transaction_write(struct tdb_context *tdb, tdb_off_t off,
 
 
 	/* Only a commit is allowed on a prepared transaction */
 	/* Only a commit is allowed on a prepared transaction */
 	if (tdb->transaction->prepared) {
 	if (tdb->transaction->prepared) {
-		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_ERROR,
 			 "transaction_write: transaction already prepared,"
 			 "transaction_write: transaction already prepared,"
 			 " write not allowed");
 			 " write not allowed");
 		goto fail;
 		goto fail;
@@ -226,7 +226,7 @@ static int transaction_write(struct tdb_context *tdb, tdb_off_t off,
 				(blk+1)*sizeof(uint8_t *));
 				(blk+1)*sizeof(uint8_t *));
 		}
 		}
 		if (new_blocks == NULL) {
 		if (new_blocks == NULL) {
-			tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
 				   "transaction_write: failed to allocate");
 				   "transaction_write: failed to allocate");
 			goto fail;
 			goto fail;
 		}
 		}
@@ -241,7 +241,7 @@ static int transaction_write(struct tdb_context *tdb, tdb_off_t off,
 	if (tdb->transaction->blocks[blk] == NULL) {
 	if (tdb->transaction->blocks[blk] == NULL) {
 		tdb->transaction->blocks[blk] = (uint8_t *)calloc(getpagesize(), 1);
 		tdb->transaction->blocks[blk] = (uint8_t *)calloc(getpagesize(), 1);
 		if (tdb->transaction->blocks[blk] == NULL) {
 		if (tdb->transaction->blocks[blk] == NULL) {
-			tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
 				   "transaction_write: failed to allocate");
 				   "transaction_write: failed to allocate");
 			goto fail;
 			goto fail;
 		}
 		}
@@ -253,7 +253,7 @@ static int transaction_write(struct tdb_context *tdb, tdb_off_t off,
 			if (tdb->transaction->io_methods->tread(tdb, blk * getpagesize(),
 			if (tdb->transaction->io_methods->tread(tdb, blk * getpagesize(),
 								tdb->transaction->blocks[blk],
 								tdb->transaction->blocks[blk],
 								len2) != 0) {
 								len2) != 0) {
-				tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_FATAL,
+				tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
 					   "transaction_write: failed to"
 					   "transaction_write: failed to"
 					   " read old block: %s",
 					   " read old block: %s",
 					   strerror(errno));
 					   strerror(errno));
@@ -341,7 +341,7 @@ static int transaction_oob(struct tdb_context *tdb, tdb_off_t len, bool probe)
 	}
 	}
 	tdb->ecode = TDB_ERR_IO;
 	tdb->ecode = TDB_ERR_IO;
 	if (!probe) {
 	if (!probe) {
-		tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 			   "tdb_oob len %lld beyond transaction size %lld",
 			   "tdb_oob len %lld beyond transaction size %lld",
 			   (long long)len,
 			   (long long)len,
 			   (long long)tdb->map_size);
 			   (long long)tdb->map_size);
@@ -417,7 +417,7 @@ static int transaction_sync(struct tdb_context *tdb, tdb_off_t offset, tdb_len_t
 	}
 	}
 
 
 	if (fsync(tdb->fd) != 0) {
 	if (fsync(tdb->fd) != 0) {
-		tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 			   "tdb_transaction: fsync failed: %s",
 			   "tdb_transaction: fsync failed: %s",
 			   strerror(errno));
 			   strerror(errno));
 		return -1;
 		return -1;
@@ -427,7 +427,7 @@ static int transaction_sync(struct tdb_context *tdb, tdb_off_t offset, tdb_len_t
 		tdb_off_t moffset = offset & ~(getpagesize()-1);
 		tdb_off_t moffset = offset & ~(getpagesize()-1);
 		if (msync(moffset + (char *)tdb->map_ptr,
 		if (msync(moffset + (char *)tdb->map_ptr,
 			  length + (offset - moffset), MS_SYNC) != 0) {
 			  length + (offset - moffset), MS_SYNC) != 0) {
-			tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 				   "tdb_transaction: msync failed: %s",
 				   "tdb_transaction: msync failed: %s",
 				   strerror(errno));
 				   strerror(errno));
 			return -1;
 			return -1;
@@ -443,7 +443,7 @@ static void _tdb_transaction_cancel(struct tdb_context *tdb)
 	int i;
 	int i;
 
 
 	if (tdb->transaction == NULL) {
 	if (tdb->transaction == NULL) {
-		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_USE_ERROR,
 			   "tdb_transaction_cancel: no transaction");
 			   "tdb_transaction_cancel: no transaction");
 		return;
 		return;
 	}
 	}
@@ -473,7 +473,7 @@ static void _tdb_transaction_cancel(struct tdb_context *tdb)
 				    &invalid, sizeof(invalid)) == -1 ||
 				    &invalid, sizeof(invalid)) == -1 ||
 		    transaction_sync(tdb, tdb->transaction->magic_offset,
 		    transaction_sync(tdb, tdb->transaction->magic_offset,
 				     sizeof(invalid)) == -1) {
 				     sizeof(invalid)) == -1) {
-			tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 				   "tdb_transaction_cancel: failed to remove"
 				   "tdb_transaction_cancel: failed to remove"
 				   " recovery magic");
 				   " recovery magic");
 		}
 		}
@@ -501,7 +501,7 @@ int tdb_transaction_start(struct tdb_context *tdb)
 {
 {
 	/* some sanity checks */
 	/* some sanity checks */
 	if (tdb->read_only || (tdb->flags & TDB_INTERNAL)) {
 	if (tdb->read_only || (tdb->flags & TDB_INTERNAL)) {
-		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_USE_ERROR,
 			   "tdb_transaction_start: cannot start a transaction"
 			   "tdb_transaction_start: cannot start a transaction"
 			   " on a read-only or internal db");
 			   " on a read-only or internal db");
 		return -1;
 		return -1;
@@ -509,7 +509,7 @@ int tdb_transaction_start(struct tdb_context *tdb)
 
 
 	/* cope with nested tdb_transaction_start() calls */
 	/* cope with nested tdb_transaction_start() calls */
 	if (tdb->transaction != NULL) {
 	if (tdb->transaction != NULL) {
-		tdb_logerr(tdb, TDB_ERR_NESTING, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_NESTING, TDB_LOG_USE_ERROR,
 			   "tdb_transaction_start:"
 			   "tdb_transaction_start:"
 			   " already inside transaction");
 			   " already inside transaction");
 		return -1;
 		return -1;
@@ -519,7 +519,7 @@ int tdb_transaction_start(struct tdb_context *tdb)
 		/* the caller must not have any locks when starting a
 		/* the caller must not have any locks when starting a
 		   transaction as otherwise we'll be screwed by lack
 		   transaction as otherwise we'll be screwed by lack
 		   of nested locks in posix */
 		   of nested locks in posix */
-		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_LOCK, TDB_LOG_USE_ERROR,
 			   "tdb_transaction_start: cannot start a transaction"
 			   "tdb_transaction_start: cannot start a transaction"
 			   " with locks held");
 			   " with locks held");
 		return -1;
 		return -1;
@@ -528,7 +528,7 @@ int tdb_transaction_start(struct tdb_context *tdb)
 	tdb->transaction = (struct tdb_transaction *)
 	tdb->transaction = (struct tdb_transaction *)
 		calloc(sizeof(struct tdb_transaction), 1);
 		calloc(sizeof(struct tdb_transaction), 1);
 	if (tdb->transaction == NULL) {
 	if (tdb->transaction == NULL) {
-		tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
 			   "tdb_transaction_start: cannot allocate");
 			   "tdb_transaction_start: cannot allocate");
 		return -1;
 		return -1;
 	}
 	}
@@ -618,7 +618,7 @@ static int tdb_recovery_allocate(struct tdb_context *tdb,
 
 
 	recovery_head = tdb_read_off(tdb, offsetof(struct tdb_header,recovery));
 	recovery_head = tdb_read_off(tdb, offsetof(struct tdb_header,recovery));
 	if (recovery_head == TDB_OFF_ERR) {
 	if (recovery_head == TDB_OFF_ERR) {
-		tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 			 "tdb_recovery_allocate:"
 			 "tdb_recovery_allocate:"
 			 " failed to read recovery head");
 			 " failed to read recovery head");
 		return -1;
 		return -1;
@@ -626,7 +626,7 @@ static int tdb_recovery_allocate(struct tdb_context *tdb,
 
 
 	if (recovery_head != 0) {
 	if (recovery_head != 0) {
 		if (methods->tread(tdb, recovery_head, &rec, sizeof(rec))) {
 		if (methods->tread(tdb, recovery_head, &rec, sizeof(rec))) {
-			tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 				 "tdb_recovery_allocate:"
 				 "tdb_recovery_allocate:"
 				 " failed to read recovery record");
 				 " failed to read recovery record");
 			return -1;
 			return -1;
@@ -657,7 +657,7 @@ static int tdb_recovery_allocate(struct tdb_context *tdb,
 		add_stat(tdb, frees, 1);
 		add_stat(tdb, frees, 1);
 		if (add_free_record(tdb, recovery_head,
 		if (add_free_record(tdb, recovery_head,
 				    sizeof(rec) + rec.max_len) != 0) {
 				    sizeof(rec) + rec.max_len) != 0) {
-			tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 				   "tdb_recovery_allocate:"
 				   "tdb_recovery_allocate:"
 				   " failed to free previous recovery area");
 				   " failed to free previous recovery area");
 			return -1;
 			return -1;
@@ -683,7 +683,7 @@ static int tdb_recovery_allocate(struct tdb_context *tdb,
 		sizeof(rec) + *recovery_max_size;
 		sizeof(rec) + *recovery_max_size;
 	tdb->map_size = tdb->transaction->old_map_size;
 	tdb->map_size = tdb->transaction->old_map_size;
 	if (methods->expand_file(tdb, addition) == -1) {
 	if (methods->expand_file(tdb, addition) == -1) {
-		tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 			 "tdb_recovery_allocate:"
 			 "tdb_recovery_allocate:"
 			 " failed to create recovery area");
 			 " failed to create recovery area");
 		return -1;
 		return -1;
@@ -699,7 +699,7 @@ static int tdb_recovery_allocate(struct tdb_context *tdb,
 	tdb_convert(tdb, &recovery_head, sizeof(recovery_head));
 	tdb_convert(tdb, &recovery_head, sizeof(recovery_head));
 	if (methods->twrite(tdb, offsetof(struct tdb_header, recovery),
 	if (methods->twrite(tdb, offsetof(struct tdb_header, recovery),
 			    &recovery_head, sizeof(tdb_off_t)) == -1) {
 			    &recovery_head, sizeof(tdb_off_t)) == -1) {
-		tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 			 "tdb_recovery_allocate:"
 			 "tdb_recovery_allocate:"
 			 " failed to write recovery head");
 			 " failed to write recovery head");
 		return -1;
 		return -1;
@@ -747,7 +747,7 @@ static int transaction_setup_recovery(struct tdb_context *tdb,
 
 
 	data = (unsigned char *)malloc(recovery_size + sizeof(*rec));
 	data = (unsigned char *)malloc(recovery_size + sizeof(*rec));
 	if (data == NULL) {
 	if (data == NULL) {
-		tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
 			   "transaction_setup_recovery: cannot allocate");
 			   "transaction_setup_recovery: cannot allocate");
 		return -1;
 		return -1;
 	}
 	}
@@ -778,7 +778,7 @@ static int transaction_setup_recovery(struct tdb_context *tdb,
 			continue;
 			continue;
 		}
 		}
 		if (offset + length > tdb->map_size) {
 		if (offset + length > tdb->map_size) {
-			tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 				   "tdb_transaction_setup_recovery:"
 				   "tdb_transaction_setup_recovery:"
 				   " transaction data over new region boundary");
 				   " transaction data over new region boundary");
 			free(data);
 			free(data);
@@ -808,7 +808,7 @@ static int transaction_setup_recovery(struct tdb_context *tdb,
 	/* write the recovery data to the recovery area */
 	/* write the recovery data to the recovery area */
 	if (methods->twrite(tdb, recovery_offset, data,
 	if (methods->twrite(tdb, recovery_offset, data,
 			    sizeof(*rec) + recovery_size) == -1) {
 			    sizeof(*rec) + recovery_size) == -1) {
-		tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 			 "tdb_transaction_setup_recovery:"
 			 "tdb_transaction_setup_recovery:"
 			 " failed to write recovery data");
 			 " failed to write recovery data");
 		free(data);
 		free(data);
@@ -835,7 +835,7 @@ static int transaction_setup_recovery(struct tdb_context *tdb,
 						   magic);
 						   magic);
 
 
 	if (methods->twrite(tdb, *magic_offset, &magic, sizeof(magic)) == -1) {
 	if (methods->twrite(tdb, *magic_offset, &magic, sizeof(magic)) == -1) {
-		tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 			 "tdb_transaction_setup_recovery:"
 			 "tdb_transaction_setup_recovery:"
 			 " failed to write recovery magic");
 			 " failed to write recovery magic");
 		return -1;
 		return -1;
@@ -855,14 +855,14 @@ static int _tdb_transaction_prepare_commit(struct tdb_context *tdb)
 	const struct tdb_methods *methods;
 	const struct tdb_methods *methods;
 
 
 	if (tdb->transaction == NULL) {
 	if (tdb->transaction == NULL) {
-		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_USE_ERROR,
 			   "tdb_transaction_prepare_commit: no transaction");
 			   "tdb_transaction_prepare_commit: no transaction");
 		return -1;
 		return -1;
 	}
 	}
 
 
 	if (tdb->transaction->prepared) {
 	if (tdb->transaction->prepared) {
 		_tdb_transaction_cancel(tdb);
 		_tdb_transaction_cancel(tdb);
-		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_USE_ERROR,
 			   "tdb_transaction_prepare_commit:"
 			   "tdb_transaction_prepare_commit:"
 			   " transaction already prepared");
 			   " transaction already prepared");
 		return -1;
 		return -1;
@@ -870,7 +870,7 @@ static int _tdb_transaction_prepare_commit(struct tdb_context *tdb)
 
 
 	if (tdb->transaction->transaction_error) {
 	if (tdb->transaction->transaction_error) {
 		_tdb_transaction_cancel(tdb);
 		_tdb_transaction_cancel(tdb);
-		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_ERROR,
 			   "tdb_transaction_prepare_commit:"
 			   "tdb_transaction_prepare_commit:"
 			   " transaction error pending");
 			   " transaction error pending");
 		return -1;
 		return -1;
@@ -891,7 +891,7 @@ static int _tdb_transaction_prepare_commit(struct tdb_context *tdb)
 
 
 	/* upgrade the main transaction lock region to a write lock */
 	/* upgrade the main transaction lock region to a write lock */
 	if (tdb_allrecord_upgrade(tdb) == -1) {
 	if (tdb_allrecord_upgrade(tdb) == -1) {
-		tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 			 "tdb_transaction_prepare_commit:"
 			 "tdb_transaction_prepare_commit:"
 			 " failed to upgrade hash locks");
 			 " failed to upgrade hash locks");
 		_tdb_transaction_cancel(tdb);
 		_tdb_transaction_cancel(tdb);
@@ -901,7 +901,7 @@ static int _tdb_transaction_prepare_commit(struct tdb_context *tdb)
 	/* get the open lock - this prevents new users attaching to the database
 	/* get the open lock - this prevents new users attaching to the database
 	   during the commit */
 	   during the commit */
 	if (tdb_lock_open(tdb, TDB_LOCK_WAIT|TDB_LOCK_NOCHECK) == -1) {
 	if (tdb_lock_open(tdb, TDB_LOCK_WAIT|TDB_LOCK_NOCHECK) == -1) {
-		tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 			 "tdb_transaction_prepare_commit:"
 			 "tdb_transaction_prepare_commit:"
 			 " failed to get open lock");
 			 " failed to get open lock");
 		_tdb_transaction_cancel(tdb);
 		_tdb_transaction_cancel(tdb);
@@ -912,7 +912,7 @@ static int _tdb_transaction_prepare_commit(struct tdb_context *tdb)
 	if (!(tdb->flags & TDB_NOSYNC)) {
 	if (!(tdb->flags & TDB_NOSYNC)) {
 		/* write the recovery data to the end of the file */
 		/* write the recovery data to the end of the file */
 		if (transaction_setup_recovery(tdb, &tdb->transaction->magic_offset) == -1) {
 		if (transaction_setup_recovery(tdb, &tdb->transaction->magic_offset) == -1) {
-			tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 				 "tdb_transaction_prepare_commit:"
 				 "tdb_transaction_prepare_commit:"
 				 " failed to setup recovery data");
 				 " failed to setup recovery data");
 			_tdb_transaction_cancel(tdb);
 			_tdb_transaction_cancel(tdb);
@@ -928,7 +928,7 @@ static int _tdb_transaction_prepare_commit(struct tdb_context *tdb)
 		/* Restore original map size for tdb_expand_file */
 		/* Restore original map size for tdb_expand_file */
 		tdb->map_size = tdb->transaction->old_map_size;
 		tdb->map_size = tdb->transaction->old_map_size;
 		if (methods->expand_file(tdb, add) == -1) {
 		if (methods->expand_file(tdb, add) == -1) {
-			tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_ERROR,
+			tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 				 "tdb_transaction_prepare_commit:"
 				 "tdb_transaction_prepare_commit:"
 				 " expansion failed");
 				 " expansion failed");
 			_tdb_transaction_cancel(tdb);
 			_tdb_transaction_cancel(tdb);
@@ -958,7 +958,7 @@ int tdb_transaction_commit(struct tdb_context *tdb)
 	int i;
 	int i;
 
 
 	if (tdb->transaction == NULL) {
 	if (tdb->transaction == NULL) {
-		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_EINVAL, TDB_LOG_USE_ERROR,
 			 "tdb_transaction_commit: no transaction");
 			 "tdb_transaction_commit: no transaction");
 		return -1;
 		return -1;
 	}
 	}
@@ -967,7 +967,7 @@ int tdb_transaction_commit(struct tdb_context *tdb)
 
 
 	if (tdb->transaction->transaction_error) {
 	if (tdb->transaction->transaction_error) {
 		tdb_transaction_cancel(tdb);
 		tdb_transaction_cancel(tdb);
-		tdb_logerr(tdb, TDB_ERR_IO, TDB_DEBUG_ERROR,
+		tdb_logerr(tdb, TDB_ERR_IO, TDB_LOG_ERROR,
 			   "tdb_transaction_commit:"
 			   "tdb_transaction_commit:"
 			   " transaction error pending");
 			   " transaction error pending");
 		return -1;
 		return -1;
@@ -1010,7 +1010,7 @@ int tdb_transaction_commit(struct tdb_context *tdb)
 
 
 		if (methods->twrite(tdb, offset, tdb->transaction->blocks[i],
 		if (methods->twrite(tdb, offset, tdb->transaction->blocks[i],
 				    length) == -1) {
 				    length) == -1) {
-			tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 				   "tdb_transaction_commit:"
 				   "tdb_transaction_commit:"
 				   " write failed during commit");
 				   " write failed during commit");
 
 
@@ -1072,7 +1072,7 @@ int tdb_transaction_recover(struct tdb_context *tdb)
 	/* find the recovery area */
 	/* find the recovery area */
 	recovery_head = tdb_read_off(tdb, offsetof(struct tdb_header,recovery));
 	recovery_head = tdb_read_off(tdb, offsetof(struct tdb_header,recovery));
 	if (recovery_head == TDB_OFF_ERR) {
 	if (recovery_head == TDB_OFF_ERR) {
-		tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 			 "tdb_transaction_recover:"
 			 "tdb_transaction_recover:"
 			 " failed to read recovery head");
 			 " failed to read recovery head");
 		return -1;
 		return -1;
@@ -1085,7 +1085,7 @@ int tdb_transaction_recover(struct tdb_context *tdb)
 
 
 	/* read the recovery record */
 	/* read the recovery record */
 	if (tdb_read_convert(tdb, recovery_head, &rec, sizeof(rec)) == -1) {
 	if (tdb_read_convert(tdb, recovery_head, &rec, sizeof(rec)) == -1) {
-		tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 			   "tdb_transaction_recover:"
 			   "tdb_transaction_recover:"
 			   " failed to read recovery record");
 			   " failed to read recovery record");
 		return -1;
 		return -1;
@@ -1097,7 +1097,7 @@ int tdb_transaction_recover(struct tdb_context *tdb)
 	}
 	}
 
 
 	if (tdb->read_only) {
 	if (tdb->read_only) {
-		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, TDB_ERR_CORRUPT, TDB_LOG_ERROR,
 			   "tdb_transaction_recover:"
 			   "tdb_transaction_recover:"
 			   " attempt to recover read only database");
 			   " attempt to recover read only database");
 		return -1;
 		return -1;
@@ -1107,7 +1107,7 @@ int tdb_transaction_recover(struct tdb_context *tdb)
 
 
 	data = (unsigned char *)malloc(rec.len);
 	data = (unsigned char *)malloc(rec.len);
 	if (data == NULL) {
 	if (data == NULL) {
-		tdb_logerr(tdb, TDB_ERR_OOM, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, TDB_ERR_OOM, TDB_LOG_ERROR,
 			   "tdb_transaction_recover:"
 			   "tdb_transaction_recover:"
 			   " failed to allocate recovery data");
 			   " failed to allocate recovery data");
 		return -1;
 		return -1;
@@ -1116,7 +1116,7 @@ int tdb_transaction_recover(struct tdb_context *tdb)
 	/* read the full recovery data */
 	/* read the full recovery data */
 	if (tdb->methods->tread(tdb, recovery_head + sizeof(rec), data,
 	if (tdb->methods->tread(tdb, recovery_head + sizeof(rec), data,
 				rec.len) == -1) {
 				rec.len) == -1) {
-		tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 			   "tdb_transaction_recover:"
 			   "tdb_transaction_recover:"
 			   " failed to read recovery data");
 			   " failed to read recovery data");
 		return -1;
 		return -1;
@@ -1134,7 +1134,7 @@ int tdb_transaction_recover(struct tdb_context *tdb)
 
 
 		if (tdb->methods->twrite(tdb, ofs, p, len) == -1) {
 		if (tdb->methods->twrite(tdb, ofs, p, len) == -1) {
 			free(data);
 			free(data);
-			tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 				 "tdb_transaction_recover:"
 				 "tdb_transaction_recover:"
 				 " failed to recover %zu bytes at offset %zu",
 				 " failed to recover %zu bytes at offset %zu",
 				 (size_t)len, (size_t)ofs);
 				 (size_t)len, (size_t)ofs);
@@ -1146,7 +1146,7 @@ int tdb_transaction_recover(struct tdb_context *tdb)
 	free(data);
 	free(data);
 
 
 	if (transaction_sync(tdb, 0, tdb->map_size) == -1) {
 	if (transaction_sync(tdb, 0, tdb->map_size) == -1) {
-		tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 			   "tdb_transaction_recover: failed to sync recovery");
 			   "tdb_transaction_recover: failed to sync recovery");
 		return -1;
 		return -1;
 	}
 	}
@@ -1155,7 +1155,7 @@ int tdb_transaction_recover(struct tdb_context *tdb)
 	if (recovery_eof <= recovery_head) {
 	if (recovery_eof <= recovery_head) {
 		if (tdb_write_off(tdb, offsetof(struct tdb_header,recovery), 0)
 		if (tdb_write_off(tdb, offsetof(struct tdb_header,recovery), 0)
 		    == -1) {
 		    == -1) {
-			tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+			tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 				 "tdb_transaction_recover:"
 				 "tdb_transaction_recover:"
 				 " failed to remove recovery head");
 				 " failed to remove recovery head");
 			return -1;
 			return -1;
@@ -1167,19 +1167,19 @@ int tdb_transaction_recover(struct tdb_context *tdb)
 			  recovery_head
 			  recovery_head
 			  + offsetof(struct tdb_recovery_record, magic),
 			  + offsetof(struct tdb_recovery_record, magic),
 			  TDB_RECOVERY_INVALID_MAGIC) == -1) {
 			  TDB_RECOVERY_INVALID_MAGIC) == -1) {
-		tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 			 "tdb_transaction_recover:"
 			 "tdb_transaction_recover:"
 			 " failed to remove recovery magic");
 			 " failed to remove recovery magic");
 		return -1;
 		return -1;
 	}
 	}
 
 
 	if (transaction_sync(tdb, 0, recovery_eof) == -1) {
 	if (transaction_sync(tdb, 0, recovery_eof) == -1) {
-		tdb_logerr(tdb, tdb->ecode, TDB_DEBUG_FATAL,
+		tdb_logerr(tdb, tdb->ecode, TDB_LOG_ERROR,
 			 "tdb_transaction_recover: failed to sync2 recovery");
 			 "tdb_transaction_recover: failed to sync2 recovery");
 		return -1;
 		return -1;
 	}
 	}
 
 
-	tdb_logerr(tdb, TDB_SUCCESS, TDB_DEBUG_TRACE,
+	tdb_logerr(tdb, TDB_SUCCESS, TDB_LOG_WARNING,
 		   "tdb_transaction_recover: recovered %zu byte database",
 		   "tdb_transaction_recover: recovered %zu byte database",
 		   (size_t)recovery_eof);
 		   (size_t)recovery_eof);