391 if (sz == 4) {
392 mdb_printf("%s = 0x%x\n", params[i], *val32p);
393 } else if (sz == 8) {
394 mdb_printf("%s = 0x%llx\n", params[i], val64);
395 } else {
396 mdb_warn("variable %s not found", params[i]);
397 }
398 }
399
400 return (DCMD_OK);
401 }
402
403 /* ARGSUSED */
404 static int
405 blkptr(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
406 {
407 blkptr_t bp;
408 dmu_object_type_info_t *doti;
409 zio_compress_info_t *zct;
410 zio_checksum_info_t *zci;
411 int i;
412 char buf[MAXPATHLEN];
413
414 if (mdb_vread(&bp, sizeof (blkptr_t), addr) == -1) {
415 mdb_warn("failed to read blkptr_t");
416 return (DCMD_ERR);
417 }
418
419 if (read_symbol("dmu_ot", (void **)&doti) != DCMD_OK)
420 return (DCMD_ERR);
421 for (i = 0; i < DMU_OT_NUMTYPES; i++) {
422 mdb_readstr(buf, sizeof (buf), (uintptr_t)doti[i].ot_name);
423 doti[i].ot_name = local_strdup(buf);
424 }
425
426 if (read_symbol("zio_checksum_table", (void **)&zci) != DCMD_OK)
427 return (DCMD_ERR);
428 for (i = 0; i < ZIO_CHECKSUM_FUNCTIONS; i++) {
429 mdb_readstr(buf, sizeof (buf), (uintptr_t)zci[i].ci_name);
430 zci[i].ci_name = local_strdup(buf);
431 }
432
433 if (read_symbol("zio_compress_table", (void **)&zct) != DCMD_OK)
434 return (DCMD_ERR);
435 for (i = 0; i < ZIO_COMPRESS_FUNCTIONS; i++) {
436 mdb_readstr(buf, sizeof (buf), (uintptr_t)zct[i].ci_name);
437 zct[i].ci_name = local_strdup(buf);
438 }
439
440 /*
441 * Super-ick warning: This code is also duplicated in
442 * cmd/zdb.c . Yeah, I hate code replication, too.
443 */
444 for (i = 0; i < BP_GET_NDVAS(&bp); i++) {
445 dva_t *dva = &bp.blk_dva[i];
446
447 mdb_printf("DVA[%d]: vdev_id %lld / %llx\n", i,
448 DVA_GET_VDEV(dva), DVA_GET_OFFSET(dva));
449 mdb_printf("DVA[%d]: GANG: %-5s GRID: %04x\t"
450 "ASIZE: %llx\n", i, DVA_GET_GANG(dva) ? "TRUE" : "FALSE",
451 DVA_GET_GRID(dva), DVA_GET_ASIZE(dva));
452 mdb_printf("DVA[%d]: :%llu:%llx:%llx:%s%s%s%s\n", i,
453 DVA_GET_VDEV(dva), DVA_GET_OFFSET(dva), BP_GET_PSIZE(&bp),
454 BP_SHOULD_BYTESWAP(&bp) ? "e" : "",
455 !DVA_GET_GANG(dva) && BP_GET_LEVEL(&bp) != 0 ? "i" : "",
456 DVA_GET_GANG(dva) ? "g" : "",
457 BP_GET_COMPRESS(&bp) != 0 ? "d" : "");
458 }
459 mdb_printf("LSIZE: %-16llx\t\tPSIZE: %llx\n",
460 BP_GET_LSIZE(&bp), BP_GET_PSIZE(&bp));
461 mdb_printf("ENDIAN: %6s\t\t\t\t\tTYPE: %s\n",
462 BP_GET_BYTEORDER(&bp) ? "LITTLE" : "BIG",
463 doti[BP_GET_TYPE(&bp)].ot_name);
464 mdb_printf("BIRTH: %-16llx LEVEL: %-2d\tFILL: %llx\n",
465 bp.blk_birth, BP_GET_LEVEL(&bp), bp.blk_fill);
466 mdb_printf("CKFUNC: %-16s\t\tCOMP: %s\n",
467 zci[BP_GET_CHECKSUM(&bp)].ci_name,
468 zct[BP_GET_COMPRESS(&bp)].ci_name);
469 mdb_printf("CKSUM: %llx:%llx:%llx:%llx\n",
470 bp.blk_cksum.zc_word[0],
471 bp.blk_cksum.zc_word[1],
472 bp.blk_cksum.zc_word[2],
473 bp.blk_cksum.zc_word[3]);
474
475 return (DCMD_OK);
476 }
477
478 /* ARGSUSED */
479 static int
480 dbuf(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
481 {
482 mdb_ctf_id_t id;
483 dmu_buf_t db;
484 uintptr_t objset;
485 uint8_t level;
486 uint64_t blkid;
487 uint64_t holds;
488 char objectname[32];
|
391 if (sz == 4) {
392 mdb_printf("%s = 0x%x\n", params[i], *val32p);
393 } else if (sz == 8) {
394 mdb_printf("%s = 0x%llx\n", params[i], val64);
395 } else {
396 mdb_warn("variable %s not found", params[i]);
397 }
398 }
399
400 return (DCMD_OK);
401 }
402
403 /* ARGSUSED */
404 static int
405 blkptr(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
406 {
407 blkptr_t bp;
408 dmu_object_type_info_t *doti;
409 zio_compress_info_t *zct;
410 zio_checksum_info_t *zci;
411 zio_crypt_info_t *zcc;
412 int i;
413 char buf[MAXPATHLEN];
414
415 if (mdb_vread(&bp, sizeof (blkptr_t), addr) == -1) {
416 mdb_warn("failed to read blkptr_t");
417 return (DCMD_ERR);
418 }
419
420 if (read_symbol("dmu_ot", (void **)&doti) != DCMD_OK)
421 return (DCMD_ERR);
422 for (i = 0; i < DMU_OT_NUMTYPES; i++) {
423 mdb_readstr(buf, sizeof (buf), (uintptr_t)doti[i].ot_name);
424 doti[i].ot_name = local_strdup(buf);
425 }
426
427 if (read_symbol("zio_checksum_table", (void **)&zci) != DCMD_OK)
428 return (DCMD_ERR);
429 for (i = 0; i < ZIO_CHECKSUM_FUNCTIONS; i++) {
430 mdb_readstr(buf, sizeof (buf), (uintptr_t)zci[i].ci_name);
431 zci[i].ci_name = local_strdup(buf);
432 }
433
434 if (read_symbol("zio_compress_table", (void **)&zct) != DCMD_OK)
435 return (DCMD_ERR);
436 for (i = 0; i < ZIO_COMPRESS_FUNCTIONS; i++) {
437 mdb_readstr(buf, sizeof (buf), (uintptr_t)zct[i].ci_name);
438 zct[i].ci_name = local_strdup(buf);
439 }
440
441 if (read_symbol("zio_crypt_table", (void **)&zcc) != DCMD_OK)
442 return (DCMD_ERR);
443 for (i = 0; i < ZIO_CRYPT_FUNCTIONS; i++) {
444 mdb_readstr(buf, sizeof (buf), (uintptr_t)zcc[i].ci_name);
445 zcc[i].ci_name = local_strdup(buf);
446 }
447
448 /*
449 * Super-ick warning: This code is also duplicated in
450 * cmd/zdb.c . Yeah, I hate code replication, too.
451 */
452 for (i = 0; i < BP_GET_NDVAS(&bp); i++) {
453 dva_t *dva = &bp.blk_dva[i];
454
455 mdb_printf("DVA[%d]: vdev_id %lld / %llx\n", i,
456 DVA_GET_VDEV(dva), DVA_GET_OFFSET(dva));
457 mdb_printf("DVA[%d]: GANG: %-5s GRID: %04x\t"
458 "ASIZE: %llx\n", i, DVA_GET_GANG(dva) ? "TRUE" : "FALSE",
459 DVA_GET_GRID(dva), DVA_GET_ASIZE(dva));
460 mdb_printf("DVA[%d]: :%llu:%llx:%llx:%s%s%s%s\n", i,
461 DVA_GET_VDEV(dva), DVA_GET_OFFSET(dva), BP_GET_PSIZE(&bp),
462 BP_SHOULD_BYTESWAP(&bp) ? "e" : "",
463 !DVA_GET_GANG(dva) && BP_GET_LEVEL(&bp) != 0 ? "i" : "",
464 DVA_GET_GANG(dva) ? "g" : "",
465 BP_GET_COMPRESS(&bp) != 0 ? "d" : "");
466 }
467 mdb_printf("LSIZE: %-16llx\t\tPSIZE: %llx\n",
468 BP_GET_LSIZE(&bp), BP_GET_PSIZE(&bp));
469 mdb_printf("ENDIAN: %6s\t\t\t\t\tTYPE: %s\n",
470 BP_GET_BYTEORDER(&bp) ? "LITTLE" : "BIG",
471 doti[BP_GET_TYPE(&bp)].ot_name);
472 mdb_printf("BIRTH: %-16llx LEVEL: %-2d\tFILL: %llx\n",
473 bp.blk_birth, BP_GET_LEVEL(&bp), bp.blk_fill);
474 mdb_printf("CKFUNC: %-16s\tCOMP: %s\tCRYPT: %s\n",
475 zci[BP_GET_CHECKSUM(&bp)].ci_name,
476 zct[BP_GET_COMPRESS(&bp)].ci_name,
477 zcc[BP_GET_CRYPT(&bp)].ci_name);
478 mdb_printf("CKSUM: %llx:%llx:%llx:%llx\n",
479 bp.blk_cksum.zc_word[0],
480 bp.blk_cksum.zc_word[1],
481 bp.blk_cksum.zc_word[2],
482 bp.blk_cksum.zc_word[3]);
483
484 return (DCMD_OK);
485 }
486
487 /* ARGSUSED */
488 static int
489 dbuf(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
490 {
491 mdb_ctf_id_t id;
492 dmu_buf_t db;
493 uintptr_t objset;
494 uint8_t level;
495 uint64_t blkid;
496 uint64_t holds;
497 char objectname[32];
|