Print this page




 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];