Fix zdb_read_block using zio after it is destroyed
The checksum display code of zdb_read_block uses a zio to read in the block and then calls zio_checksum_compute. Use a new zio in the call to zio_checksum_compute not the zio from the read which has been destroyed by zio_wait. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Igor Kozhukhov <igor@dilos.org> Signed-off-by: Paul Zuchowski <pzuchowski@datto.com> Closes #9644 Closes #9657
This commit is contained in:
parent
54c8366e39
commit
5a08977374
@ -6608,13 +6608,18 @@ zdb_read_block(char *thing, spa_t *spa)
|
||||
}
|
||||
error = zio_wait(czio);
|
||||
if (error == 0 || error == ECKSUM) {
|
||||
zio_checksum_compute(czio, ck, pabd, lsize);
|
||||
zio_t *ck_zio = zio_root(spa, NULL, NULL, 0);
|
||||
ck_zio->io_offset =
|
||||
DVA_GET_OFFSET(&bp->blk_dva[0]);
|
||||
ck_zio->io_bp = bp;
|
||||
zio_checksum_compute(ck_zio, ck, pabd, lsize);
|
||||
printf("%12s\tcksum=%llx:%llx:%llx:%llx\n",
|
||||
zio_checksum_table[ck].ci_name,
|
||||
(u_longlong_t)bp->blk_cksum.zc_word[0],
|
||||
(u_longlong_t)bp->blk_cksum.zc_word[1],
|
||||
(u_longlong_t)bp->blk_cksum.zc_word[2],
|
||||
(u_longlong_t)bp->blk_cksum.zc_word[3]);
|
||||
zio_wait(ck_zio);
|
||||
} else {
|
||||
printf("error %d reading block\n", error);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user