aboutsummaryrefslogtreecommitdiff
path: root/sys/contrib/openzfs/cmd/zdb/zdb.c
diff options
context:
space:
mode:
authorMartin Matuska <mm@FreeBSD.org>2024-03-07 09:49:48 +0000
committerMartin Matuska <mm@FreeBSD.org>2024-03-07 09:52:19 +0000
commit4fefe1b763573c873bf3dbf3b6f28c22de0ffada (patch)
treea797519c5b16fdbd016ff8b1996780f37e2dbd6a /sys/contrib/openzfs/cmd/zdb/zdb.c
parentcbddb2f02c7687d1039abcffd931e94e481c11a5 (diff)
parent8f2f6cd2ac688916adb2caf979daf95365ccb48f (diff)
zfs: merge openzfs/zfs@8f2f6cd2a
Notable upstream pull request merges: #15887 -multiple Fast Dedup: Cleanup and documentation ahead of integrating Fast Dedup #15907 5600dff0e Fixed parameter passing error when calling zfs_acl_chmod #15908 8f2f6cd2a ddt: reduce DDT_NAMELEN Obtained from: OpenZFS OpenZFS commit: 8f2f6cd2ac688916adb2caf979daf95365ccb48f
Diffstat (limited to 'sys/contrib/openzfs/cmd/zdb/zdb.c')
-rw-r--r--sys/contrib/openzfs/cmd/zdb/zdb.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/sys/contrib/openzfs/cmd/zdb/zdb.c b/sys/contrib/openzfs/cmd/zdb/zdb.c
index b857e61bd04f..4880c8048726 100644
--- a/sys/contrib/openzfs/cmd/zdb/zdb.c
+++ b/sys/contrib/openzfs/cmd/zdb/zdb.c
@@ -74,6 +74,7 @@
#include <sys/arc.h>
#include <sys/arc_impl.h>
#include <sys/ddt.h>
+#include <sys/ddt_impl.h>
#include <sys/zfeature.h>
#include <sys/abd.h>
#include <sys/blkptr.h>
@@ -1904,7 +1905,7 @@ dump_dedup_ratio(const ddt_stat_t *dds)
}
static void
-dump_ddt(ddt_t *ddt, enum ddt_type type, enum ddt_class class)
+dump_ddt(ddt_t *ddt, ddt_type_t type, ddt_class_t class)
{
char name[DDT_NAMELEN];
ddt_entry_t dde;
@@ -1964,8 +1965,10 @@ dump_all_ddts(spa_t *spa)
for (enum zio_checksum c = 0; c < ZIO_CHECKSUM_FUNCTIONS; c++) {
ddt_t *ddt = spa->spa_ddt[c];
- for (enum ddt_type type = 0; type < DDT_TYPES; type++) {
- for (enum ddt_class class = 0; class < DDT_CLASSES;
+ if (!ddt)
+ continue;
+ for (ddt_type_t type = 0; type < DDT_TYPES; type++) {
+ for (ddt_class_t class = 0; class < DDT_CLASSES;
class++) {
dump_ddt(ddt, type, class);
}
@@ -6061,6 +6064,8 @@ zdb_ddt_leak_init(spa_t *spa, zdb_cb_t *zcb)
return;
ASSERT(ddt_phys_total_refcnt(&dde) > 1);
+ ddt_t *ddt = spa->spa_ddt[ddb.ddb_checksum];
+ VERIFY(ddt);
for (p = 0; p < DDT_PHYS_TYPES; p++, ddp++) {
if (ddp->ddp_phys_birth == 0)
@@ -6075,7 +6080,7 @@ zdb_ddt_leak_init(spa_t *spa, zdb_cb_t *zcb)
zcb->zcb_dedup_blocks++;
}
}
- ddt_t *ddt = spa->spa_ddt[ddb.ddb_checksum];
+
ddt_enter(ddt);
VERIFY(ddt_lookup(ddt, &blk, B_TRUE) != NULL);
ddt_exit(ddt);
@@ -7121,6 +7126,7 @@ dump_block_stats(spa_t *spa)
}
typedef struct zdb_ddt_entry {
+ /* key must be first for ddt_key_compare */
ddt_key_t zdde_key;
uint64_t zdde_ref_blocks;
uint64_t zdde_ref_lsize;
@@ -7181,7 +7187,7 @@ dump_simulated_ddt(spa_t *spa)
ddt_histogram_t ddh_total = {{{0}}};
ddt_stat_t dds_total = {0};
- avl_create(&t, ddt_entry_compare,
+ avl_create(&t, ddt_key_compare,
sizeof (zdb_ddt_entry_t), offsetof(zdb_ddt_entry_t, zdde_node));
spa_config_enter(spa, SCL_CONFIG, FTAG, RW_READER);
@@ -7947,6 +7953,8 @@ dump_mos_leaks(spa_t *spa)
for (uint64_t cksum = 0;
cksum < ZIO_CHECKSUM_FUNCTIONS; cksum++) {
ddt_t *ddt = spa->spa_ddt[cksum];
+ if (!ddt)
+ continue;
mos_obj_refd(ddt->ddt_object[type][class]);
}
}