zdb: fix BRT dump (#16335)
BRT refcounts are stored as eight uint8_ts rather than a single uint64_t. This means that za_first_integer is only the first byte, so max 256. This fixes it by doing a lookup for the whole value. Sponsored-by: Klara, Inc. Sponsored-by: Wasabi Technology, Inc. Signed-off-by: Rob Norris <rob.norris@klarasystems.com> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Reviewed-by: Alexander Motin <mav@FreeBSD.org>
This commit is contained in:
parent
1147a27978
commit
aea42e1379
|
@ -2104,8 +2104,13 @@ dump_brt(spa_t *spa)
|
||||||
for (zap_cursor_init(&zc, brt->brt_mos, brtvd->bv_mos_entries);
|
for (zap_cursor_init(&zc, brt->brt_mos, brtvd->bv_mos_entries);
|
||||||
zap_cursor_retrieve(&zc, &za) == 0;
|
zap_cursor_retrieve(&zc, &za) == 0;
|
||||||
zap_cursor_advance(&zc)) {
|
zap_cursor_advance(&zc)) {
|
||||||
uint64_t offset = *(uint64_t *)za.za_name;
|
uint64_t refcnt;
|
||||||
uint64_t refcnt = za.za_first_integer;
|
VERIFY0(zap_lookup_uint64(brt->brt_mos,
|
||||||
|
brtvd->bv_mos_entries,
|
||||||
|
(const uint64_t *)za.za_name, 1,
|
||||||
|
za.za_integer_length, za.za_num_integers, &refcnt));
|
||||||
|
|
||||||
|
uint64_t offset = *(const uint64_t *)za.za_name;
|
||||||
|
|
||||||
snprintf(dva, sizeof (dva), "%" PRIu64 ":%llx", vdevid,
|
snprintf(dva, sizeof (dva), "%" PRIu64 ":%llx", vdevid,
|
||||||
(u_longlong_t)offset);
|
(u_longlong_t)offset);
|
||||||
|
|
Loading…
Reference in New Issue