mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +03:00
ddt: introduce lightweight entry
The idea here is that sometimes you need the contents of an entry with no intent to modify it, and/or from a place where its difficult to get hold of its originating ddt_t to know how to interpret it. A lightweight entry contains everything you might need to "read" an entry - its key, type and phys contents - but none of the extras for modifying it or using it in a larger context. It also has the full complement of phys slots, so it can represent any kind of dedup entry without having to know the specific configuration of the table it came from. Reviewed-by: Alexander Motin <mav@FreeBSD.org> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Rob Norris <rob.norris@klarasystems.com> Sponsored-by: Klara, Inc. Sponsored-by: iXsystems, Inc. Closes #15893
This commit is contained in:
committed by
Brian Behlendorf
parent
d17ab631a9
commit
4d686c3da5
+8
-7
@@ -1914,15 +1914,16 @@ dump_log_spacemaps(spa_t *spa)
|
||||
}
|
||||
|
||||
static void
|
||||
dump_dde(const ddt_t *ddt, const ddt_entry_t *dde, uint64_t index)
|
||||
dump_ddt_entry(const ddt_t *ddt, const ddt_lightweight_entry_t *ddlwe,
|
||||
uint64_t index)
|
||||
{
|
||||
const ddt_key_t *ddk = &dde->dde_key;
|
||||
const ddt_key_t *ddk = &ddlwe->ddlwe_key;
|
||||
char blkbuf[BP_SPRINTF_LEN];
|
||||
blkptr_t blk;
|
||||
int p;
|
||||
|
||||
for (p = 0; p < DDT_NPHYS(ddt); p++) {
|
||||
const ddt_phys_t *ddp = &dde->dde_phys[p];
|
||||
for (p = 0; p < ddlwe->ddlwe_nphys; p++) {
|
||||
const ddt_phys_t *ddp = &ddlwe->ddlwe_phys[p];
|
||||
if (ddp->ddp_phys_birth == 0)
|
||||
continue;
|
||||
ddt_bp_create(ddt->ddt_checksum, ddk, ddp, &blk);
|
||||
@@ -1959,7 +1960,7 @@ static void
|
||||
dump_ddt(ddt_t *ddt, ddt_type_t type, ddt_class_t class)
|
||||
{
|
||||
char name[DDT_NAMELEN];
|
||||
ddt_entry_t dde;
|
||||
ddt_lightweight_entry_t ddlwe;
|
||||
uint64_t walk = 0;
|
||||
dmu_object_info_t doi;
|
||||
uint64_t count, dspace, mspace;
|
||||
@@ -2000,8 +2001,8 @@ dump_ddt(ddt_t *ddt, ddt_type_t type, ddt_class_t class)
|
||||
|
||||
(void) printf("%s contents:\n\n", name);
|
||||
|
||||
while ((error = ddt_object_walk(ddt, type, class, &walk, &dde)) == 0)
|
||||
dump_dde(ddt, &dde, walk);
|
||||
while ((error = ddt_object_walk(ddt, type, class, &walk, &ddlwe)) == 0)
|
||||
dump_ddt_entry(ddt, &ddlwe, walk);
|
||||
|
||||
ASSERT3U(error, ==, ENOENT);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user