Lines Matching +full:n +full:- +full:mos
1 // SPDX-License-Identifier: CDDL-1.0
10 * or https://opensource.org/licenses/CDDL-1.0.
172 return (livelist_compare(&l->svbr_blk, &r->svbr_blk)); in sublivelist_block_refcnt_compare()
186 * This field is not used for our B-Tree comparisons in sublivelist_verify_blkptr()
194 zfs_btree_find(&sv->sv_pair, ¤t, &where); in sublivelist_verify_blkptr()
198 zfs_btree_add(&sv->sv_pair, ¤t); in sublivelist_verify_blkptr()
200 pair->svbr_refcnt++; in sublivelist_verify_blkptr()
206 if (DVA_IS_EMPTY(&bp->blk_dva[i])) in sublivelist_verify_blkptr()
209 .svb_dva = bp->blk_dva[i], in sublivelist_verify_blkptr()
214 if (zfs_btree_find(&sv->sv_leftover, &svb, in sublivelist_verify_blkptr()
216 zfs_btree_add_idx(&sv->sv_leftover, in sublivelist_verify_blkptr()
222 pair->svbr_refcnt--; in sublivelist_verify_blkptr()
223 if (pair->svbr_refcnt == 0) { in sublivelist_verify_blkptr()
225 zfs_btree_remove_idx(&sv->sv_pair, &where); in sublivelist_verify_blkptr()
239 zfs_btree_create(&sv->sv_pair, sublivelist_block_refcnt_compare, NULL, in sublivelist_verify_func()
242 err = bpobj_iterate_nofree(&dle->dle_bpobj, sublivelist_verify_blkptr, in sublivelist_verify_func()
247 while ((e = zfs_btree_destroy_nodes(&sv->sv_pair, &cookie)) != NULL) { in sublivelist_verify_func()
250 &e->svbr_blk, B_TRUE); in sublivelist_verify_func()
251 (void) printf("\tERROR: %d unmatched FREE(s): %s\n", in sublivelist_verify_func()
252 e->svbr_refcnt, blkbuf); in sublivelist_verify_func()
254 zfs_btree_destroy(&sv->sv_pair); in sublivelist_verify_func()
265 if (DVA_GET_VDEV(&l->svb_dva) < DVA_GET_VDEV(&r->svb_dva)) in livelist_block_compare()
266 return (-1); in livelist_block_compare()
267 else if (DVA_GET_VDEV(&l->svb_dva) > DVA_GET_VDEV(&r->svb_dva)) in livelist_block_compare()
270 if (DVA_GET_OFFSET(&l->svb_dva) < DVA_GET_OFFSET(&r->svb_dva)) in livelist_block_compare()
271 return (-1); in livelist_block_compare()
272 else if (DVA_GET_OFFSET(&l->svb_dva) > DVA_GET_OFFSET(&r->svb_dva)) in livelist_block_compare()
275 if (DVA_GET_ASIZE(&l->svb_dva) < DVA_GET_ASIZE(&r->svb_dva)) in livelist_block_compare()
276 return (-1); in livelist_block_compare()
277 else if (DVA_GET_ASIZE(&l->svb_dva) > DVA_GET_ASIZE(&r->svb_dva)) in livelist_block_compare()
285 * sublivelist_verify_t: sv->sv_leftover
348 return (uic->uic_cb(uic->uic_spa, sme, uic->uic_txg, uic->uic_arg)); in iterate_through_spacemap_logs_cb()
358 for (spa_log_sm_t *sls = avl_first(&spa->spa_sm_logs_by_txg); in iterate_through_spacemap_logs()
359 sls; sls = AVL_NEXT(&spa->spa_sm_logs_by_txg, sls)) { in iterate_through_spacemap_logs()
362 sls->sls_sm_obj, 0, UINT64_MAX, SPA_MINBLOCKSHIFT)); in iterate_through_spacemap_logs()
366 .uic_txg = sls->sls_txg, in iterate_through_spacemap_logs()
382 DVA_SET_VDEV(&svb.svb_dva, mv->mv_vdid); in verify_livelist_allocs()
394 zfs_btree_find(&mv->mv_livelist_allocs, &svb, &where); in verify_livelist_allocs()
396 found = zfs_btree_next(&mv->mv_livelist_allocs, &where, &where); in verify_livelist_allocs()
398 for (; found != NULL && DVA_GET_VDEV(&found->svb_dva) == mv->mv_vdid && in verify_livelist_allocs()
399 DVA_GET_OFFSET(&found->svb_dva) < end_offset; in verify_livelist_allocs()
400 found = zfs_btree_next(&mv->mv_livelist_allocs, &where, &where)) { in verify_livelist_allocs()
401 if (found->svb_allocated_txg <= txg) { in verify_livelist_allocs()
403 "from TXG %llx FREED at TXG %llx\n", in verify_livelist_allocs()
404 (u_longlong_t)DVA_GET_OFFSET(&found->svb_dva), in verify_livelist_allocs()
405 (u_longlong_t)DVA_GET_ASIZE(&found->svb_dva), in verify_livelist_allocs()
406 (u_longlong_t)found->svb_allocated_txg, in verify_livelist_allocs()
416 uint64_t offset = sme->sme_offset; in metaslab_spacemap_validation_cb()
417 uint64_t size = sme->sme_run; in metaslab_spacemap_validation_cb()
418 uint64_t txg = sme->sme_txg; in metaslab_spacemap_validation_cb()
420 if (sme->sme_type == SM_ALLOC) { in metaslab_spacemap_validation_cb()
421 if (zfs_range_tree_contains(mv->mv_allocated, in metaslab_spacemap_validation_cb()
425 "%llu:%llu LOG_SM\n", in metaslab_spacemap_validation_cb()
427 (u_longlong_t)size, (u_longlong_t)mv->mv_vdid, in metaslab_spacemap_validation_cb()
428 (u_longlong_t)mv->mv_msid); in metaslab_spacemap_validation_cb()
430 zfs_range_tree_add(mv->mv_allocated, in metaslab_spacemap_validation_cb()
434 if (!zfs_range_tree_contains(mv->mv_allocated, in metaslab_spacemap_validation_cb()
438 "%llu:%llu LOG_SM\n", in metaslab_spacemap_validation_cb()
440 (u_longlong_t)size, (u_longlong_t)mv->mv_vdid, in metaslab_spacemap_validation_cb()
441 (u_longlong_t)mv->mv_msid); in metaslab_spacemap_validation_cb()
443 zfs_range_tree_remove(mv->mv_allocated, in metaslab_spacemap_validation_cb()
448 if (sme->sme_type != SM_ALLOC) { in metaslab_spacemap_validation_cb()
463 uint64_t offset = sme->sme_offset; in spacemap_check_sm_log_cb()
464 uint64_t vdev_id = sme->sme_vdev; in spacemap_check_sm_log_cb()
472 if (vdev_id != mv->mv_vdid) in spacemap_check_sm_log_cb()
475 metaslab_t *ms = vd->vdev_ms[offset >> vd->vdev_ms_shift]; in spacemap_check_sm_log_cb()
476 if (ms->ms_id != mv->mv_msid) in spacemap_check_sm_log_cb()
483 ASSERT3U(txg, ==, sme->sme_txg); in spacemap_check_sm_log_cb()
514 ASSERT3U(zfs_btree_numnodes(&mv->mv_livelist_allocs), ==, 0); in mv_populate_livelist_allocs()
515 for (svb = zfs_btree_first(&sv->sv_leftover, &where); in mv_populate_livelist_allocs()
517 svb = zfs_btree_next(&sv->sv_leftover, &where, &where)) { in mv_populate_livelist_allocs()
518 if (DVA_GET_VDEV(&svb->svb_dva) != mv->mv_vdid) in mv_populate_livelist_allocs()
521 if (DVA_GET_OFFSET(&svb->svb_dva) < mv->mv_start && in mv_populate_livelist_allocs()
522 (DVA_GET_OFFSET(&svb->svb_dva) + in mv_populate_livelist_allocs()
523 DVA_GET_ASIZE(&svb->svb_dva)) > mv->mv_start) { in mv_populate_livelist_allocs()
525 "metaslab boundary: <%llu:%llx:%llx>\n", in mv_populate_livelist_allocs()
526 (u_longlong_t)DVA_GET_VDEV(&svb->svb_dva), in mv_populate_livelist_allocs()
527 (u_longlong_t)DVA_GET_OFFSET(&svb->svb_dva), in mv_populate_livelist_allocs()
528 (u_longlong_t)DVA_GET_ASIZE(&svb->svb_dva)); in mv_populate_livelist_allocs()
532 if (DVA_GET_OFFSET(&svb->svb_dva) < mv->mv_start) in mv_populate_livelist_allocs()
535 if (DVA_GET_OFFSET(&svb->svb_dva) >= mv->mv_end) in mv_populate_livelist_allocs()
538 if ((DVA_GET_OFFSET(&svb->svb_dva) + in mv_populate_livelist_allocs()
539 DVA_GET_ASIZE(&svb->svb_dva)) > mv->mv_end) { in mv_populate_livelist_allocs()
541 "metaslab boundary: <%llu:%llx:%llx>\n", in mv_populate_livelist_allocs()
542 (u_longlong_t)DVA_GET_VDEV(&svb->svb_dva), in mv_populate_livelist_allocs()
543 (u_longlong_t)DVA_GET_OFFSET(&svb->svb_dva), in mv_populate_livelist_allocs()
544 (u_longlong_t)DVA_GET_ASIZE(&svb->svb_dva)); in mv_populate_livelist_allocs()
548 zfs_btree_add(&mv->mv_livelist_allocs, svb); in mv_populate_livelist_allocs()
551 for (svb = zfs_btree_first(&mv->mv_livelist_allocs, &where); in mv_populate_livelist_allocs()
553 svb = zfs_btree_next(&mv->mv_livelist_allocs, &where, &where)) { in mv_populate_livelist_allocs()
554 zfs_btree_remove(&sv->sv_leftover, svb); in mv_populate_livelist_allocs()
561 * - report leftover frees (**)
562 * - record leftover ALLOCs together with their TXG [see Cross Check]
571 * - iterate over spacemap and then the metaslab's entries in the
592 (void) printf("Verifying deleted livelist entries\n"); in livelist_metaslab_validate()
599 (void) printf("Verifying metaslab entries\n"); in livelist_metaslab_validate()
600 vdev_t *rvd = spa->spa_root_vdev; in livelist_metaslab_validate()
601 for (uint64_t c = 0; c < rvd->vdev_children; c++) { in livelist_metaslab_validate()
602 vdev_t *vd = rvd->vdev_child[c]; in livelist_metaslab_validate()
607 for (uint64_t mid = 0; mid < vd->vdev_ms_count; mid++) { in livelist_metaslab_validate()
608 metaslab_t *m = vd->vdev_ms[mid]; in livelist_metaslab_validate()
613 (longlong_t)vd->vdev_id, in livelist_metaslab_validate()
615 (longlong_t)vd->vdev_ms_count); in livelist_metaslab_validate()
624 mv.mv_vdid = vd->vdev_id; in livelist_metaslab_validate()
625 mv.mv_msid = m->ms_id; in livelist_metaslab_validate()
626 mv.mv_start = m->ms_start; in livelist_metaslab_validate()
627 mv.mv_end = m->ms_start + m->ms_size; in livelist_metaslab_validate()
634 spacemap_check_ms_sm(m->ms_sm, &mv); in livelist_metaslab_validate()
643 (void) fprintf(stderr, "\n"); in livelist_metaslab_validate()
656 "for indirect vdevs:\n"); in livelist_metaslab_validate()
662 int vdev_id = DVA_GET_VDEV(&svb->svb_dva); in livelist_metaslab_validate()
663 ASSERT3U(vdev_id, <, rvd->vdev_children); in livelist_metaslab_validate()
664 vdev_t *vd = rvd->vdev_child[vdev_id]; in livelist_metaslab_validate()
666 (void) printf("<%d:%llx:%llx> TXG %llx\n", in livelist_metaslab_validate()
667 vdev_id, (u_longlong_t)DVA_GET_OFFSET(&svb->svb_dva), in livelist_metaslab_validate()
668 (u_longlong_t)DVA_GET_ASIZE(&svb->svb_dva), in livelist_metaslab_validate()
669 (u_longlong_t)svb->svb_allocated_txg); in livelist_metaslab_validate()
671 (void) printf("\n"); in livelist_metaslab_validate()
695 "Usage:\t%s [-AbcdDFGhikLMPsvXy] [-e [-V] [-p <path> ...]] " in usage()
696 "[-I <inflight I/Os>]\n" in usage()
697 "\t\t[-o <var>=<value>]... [-t <txg>] [-U <cache>] [-x <dumpdir>]\n" in usage()
698 "\t\t[-K <key>]\n" in usage()
699 "\t\t[<poolname>[/<dataset | objset id>] [<object | range> ...]]\n" in usage()
700 "\t%s [-AdiPv] [-e [-V] [-p <path> ...]] [-U <cache>] [-K <key>]\n" in usage()
701 "\t\t[<poolname>[/<dataset | objset id>] [<object | range> ...]\n" in usage()
702 "\t%s -B [-e [-V] [-p <path> ...]] [-I <inflight I/Os>]\n" in usage()
703 "\t\t[-o <var>=<value>]... [-t <txg>] [-U <cache>] [-x <dumpdir>]\n" in usage()
704 "\t\t[-K <key>] <poolname>/<objset id> [<backupflags>]\n" in usage()
705 "\t%s [-v] <bookmark>\n" in usage()
706 "\t%s -C [-A] [-U <cache>] [<poolname>]\n" in usage()
707 "\t%s -l [-Aqu] <device>\n" in usage()
708 "\t%s -m [-AFLPX] [-e [-V] [-p <path> ...]] [-t <txg>] " in usage()
709 "[-U <cache>]\n\t\t<poolname> [<vdev> [<metaslab> ...]]\n" in usage()
710 "\t%s -O [-K <key>] <dataset> <path>\n" in usage()
711 "\t%s -r [-K <key>] <dataset> <path> <destination>\n" in usage()
712 "\t%s -R [-A] [-e [-V] [-p <path> ...]] [-U <cache>]\n" in usage()
713 "\t\t<poolname> <vdev>:<offset>:<size>[:<flags>]\n" in usage()
714 "\t%s -E [-A] word0:word1:...:word15\n" in usage()
715 "\t%s -S [-AP] [-e [-V] [-p <path> ...]] [-U <cache>] " in usage()
716 "<poolname>\n\n", in usage()
721 "separator character '/' or '@'\n"); in usage()
723 "dataset is dumped\n"); in usage()
725 "ranges are specified, only those\n" in usage()
726 " objects or ranges are dumped.\n\n"); in usage()
728 " Object ranges take the form <start>:<end>[:<flags>]\n" in usage()
729 " start Starting object number\n" in usage()
730 " end Ending object number, or -1 for no upper bound\n" in usage()
731 " flags Optional flags to select object types:\n" in usage()
732 " A All objects (this is the default)\n" in usage()
733 " d ZFS directories\n" in usage()
734 " f ZFS files \n" in usage()
735 " m SPA space maps\n" in usage()
736 " z ZAPs\n" in usage()
737 " - Negate effect of next flag\n\n"); in usage()
738 (void) fprintf(stderr, " Options to control amount of output:\n"); in usage()
739 (void) fprintf(stderr, " -b --block-stats " in usage()
740 "block statistics\n"); in usage()
741 (void) fprintf(stderr, " -B --backup " in usage()
742 "backup stream\n"); in usage()
743 (void) fprintf(stderr, " -c --checksum " in usage()
744 "checksum all metadata (twice for all data) blocks\n"); in usage()
745 (void) fprintf(stderr, " -C --config " in usage()
746 "config (or cachefile if alone)\n"); in usage()
747 (void) fprintf(stderr, " -d --datasets " in usage()
748 "dataset(s)\n"); in usage()
749 (void) fprintf(stderr, " -D --dedup-stats " in usage()
750 "dedup statistics\n"); in usage()
751 (void) fprintf(stderr, " -E --embedded-block-pointer=INTEGER\n" in usage()
753 "from an embedded block pointer\n"); in usage()
754 (void) fprintf(stderr, " -h --history " in usage()
755 "pool history\n"); in usage()
756 (void) fprintf(stderr, " -i --intent-logs " in usage()
757 "intent logs\n"); in usage()
758 (void) fprintf(stderr, " -l --label " in usage()
759 "read label contents\n"); in usage()
760 (void) fprintf(stderr, " -k --checkpointed-state " in usage()
761 "examine the checkpointed state of the pool\n"); in usage()
762 (void) fprintf(stderr, " -L --disable-leak-tracking " in usage()
763 "disable leak tracking (do not load spacemaps)\n"); in usage()
764 (void) fprintf(stderr, " -m --metaslabs " in usage()
765 "metaslabs\n"); in usage()
766 (void) fprintf(stderr, " -M --metaslab-groups " in usage()
767 "metaslab groups\n"); in usage()
768 (void) fprintf(stderr, " -O --object-lookups " in usage()
769 "perform object lookups by path\n"); in usage()
770 (void) fprintf(stderr, " -r --copy-object " in usage()
771 "copy an object by path to file\n"); in usage()
772 (void) fprintf(stderr, " -R --read-block " in usage()
773 "read and display block from a device\n"); in usage()
774 (void) fprintf(stderr, " -s --io-stats " in usage()
775 "report stats on zdb's I/O\n"); in usage()
776 (void) fprintf(stderr, " -S --simulate-dedup " in usage()
777 "simulate dedup to measure effect\n"); in usage()
778 (void) fprintf(stderr, " -v --verbose " in usage()
779 "verbose (applies to all others)\n"); in usage()
780 (void) fprintf(stderr, " -y --livelist " in usage()
782 "deleted\n\n"); in usage()
784 "with other options:\n"); in usage()
785 (void) fprintf(stderr, " -A --ignore-assertions " in usage()
786 "ignore assertions (-A), enable panic recovery (-AA) or both " in usage()
787 "(-AAA)\n"); in usage()
788 (void) fprintf(stderr, " -e --exported " in usage()
789 "pool is exported/destroyed/has altroot/not in a cachefile\n"); in usage()
790 (void) fprintf(stderr, " -F --automatic-rewind " in usage()
792 "groups\n"); in usage()
793 (void) fprintf(stderr, " -G --dump-debug-msg " in usage()
794 "dump zfs_dbgmsg buffer before exiting\n"); in usage()
795 (void) fprintf(stderr, " -I --inflight=INTEGER " in usage()
797 "[default is 200]\n"); in usage()
798 (void) fprintf(stderr, " -K --key=KEY " in usage()
799 "decryption key for encrypted dataset\n"); in usage()
800 (void) fprintf(stderr, " -o --option=\"OPTION=INTEGER\" " in usage()
801 "set global variable to an unsigned 32-bit integer\n"); in usage()
802 (void) fprintf(stderr, " -p --path==PATH " in usage()
803 "use one or more with -e to specify path to vdev dir\n"); in usage()
804 (void) fprintf(stderr, " -P --parseable " in usage()
805 "print numbers in parseable form\n"); in usage()
806 (void) fprintf(stderr, " -q --skip-label " in usage()
807 "don't print label contents\n"); in usage()
808 (void) fprintf(stderr, " -t --txg=INTEGER " in usage()
809 "highest txg to use when searching for uberblocks\n"); in usage()
810 (void) fprintf(stderr, " -T --brt-stats " in usage()
811 "BRT statistics\n"); in usage()
812 (void) fprintf(stderr, " -u --uberblock " in usage()
813 "uberblock\n"); in usage()
814 (void) fprintf(stderr, " -U --cachefile=PATH " in usage()
815 "use alternate cachefile\n"); in usage()
816 (void) fprintf(stderr, " -V --verbatim " in usage()
817 "do verbatim import\n"); in usage()
818 (void) fprintf(stderr, " -x --dump-blocks=PATH " in usage()
819 "dump all read blocks into specified directory\n"); in usage()
820 (void) fprintf(stderr, " -X --extreme-rewind " in usage()
821 "attempt extreme rewind (does not work with dataset)\n"); in usage()
822 (void) fprintf(stderr, " -Y --all-reconstruction " in usage()
823 "attempt all reconstruction combinations for split blocks\n"); in usage()
824 (void) fprintf(stderr, " -Z --zstd-headers " in usage()
825 "show ZSTD headers \n"); in usage()
826 (void) fprintf(stderr, "Specify an option more than once (e.g. -bb) " in usage()
827 "to make only that option verbose\n"); in usage()
828 (void) fprintf(stderr, "Default is to dump everything non-verbosely\n"); in usage()
843 ret = write(STDERR_FILENO, "\n", 1); in dump_debug_buffer()
855 * Restore default action and re-raise signal so SIGSEGV and in sig_handler()
879 (void) fprintf(stderr, "\n"); in fatal()
914 (void) printf("\t\tpool_create_len = %llu\n", in dump_history_offsets()
915 (u_longlong_t)shp->sh_pool_create_len); in dump_history_offsets()
916 (void) printf("\t\tphys_max_off = %llu\n", in dump_history_offsets()
917 (u_longlong_t)shp->sh_phys_max_off); in dump_history_offsets()
918 (void) printf("\t\tbof = %llu\n", in dump_history_offsets()
919 (u_longlong_t)shp->sh_bof); in dump_history_offsets()
920 (void) printf("\t\teof = %llu\n", in dump_history_offsets()
921 (u_longlong_t)shp->sh_eof); in dump_history_offsets()
922 (void) printf("\t\trecords_lost = %llu\n", in dump_history_offsets()
923 (u_longlong_t)shp->sh_records_lost); in dump_history_offsets()
945 static const uint64_t histo_width = sizeof (histo_stars) - 1;
951 int minidx = size - 1; in dump_histogram()
970 (void) printf("\t\t\t%3u: %6llu %s\n", in dump_histogram()
972 &histo_stars[(max - histo[i]) * histo_width / max]); in dump_histogram()
988 (void) printf("\tmicrozap: %llu bytes, %llu entries\n", in dump_zap_stats()
994 (void) printf("\tFat ZAP stats:\n"); in dump_zap_stats()
996 (void) printf("\t\tPointer table:\n"); in dump_zap_stats()
997 (void) printf("\t\t\t%llu elements\n", in dump_zap_stats()
999 (void) printf("\t\t\tzt_blk: %llu\n", in dump_zap_stats()
1001 (void) printf("\t\t\tzt_numblks: %llu\n", in dump_zap_stats()
1003 (void) printf("\t\t\tzt_shift: %llu\n", in dump_zap_stats()
1005 (void) printf("\t\t\tzt_blks_copied: %llu\n", in dump_zap_stats()
1007 (void) printf("\t\t\tzt_nextblk: %llu\n", in dump_zap_stats()
1010 (void) printf("\t\tZAP entries: %llu\n", in dump_zap_stats()
1012 (void) printf("\t\tLeaf blocks: %llu\n", in dump_zap_stats()
1014 (void) printf("\t\tTotal blocks: %llu\n", in dump_zap_stats()
1016 (void) printf("\t\tzap_block_type: 0x%llx\n", in dump_zap_stats()
1018 (void) printf("\t\tzap_magic: 0x%llx\n", in dump_zap_stats()
1020 (void) printf("\t\tzap_salt: 0x%llx\n", in dump_zap_stats()
1023 (void) printf("\t\tLeafs with 2^n pointers:\n"); in dump_zap_stats()
1026 (void) printf("\t\tBlocks with n*5 entries:\n"); in dump_zap_stats()
1029 (void) printf("\t\tBlocks n/10 full:\n"); in dump_zap_stats()
1032 (void) printf("\t\tEntries with n chunks:\n"); in dump_zap_stats()
1035 (void) printf("\t\tBuckets with n entries:\n"); in dump_zap_stats()
1049 (void) printf("\tUNKNOWN OBJECT TYPE\n"); in dump_unknown()
1073 * allocation failures and nigh-infinite printing if the in dump_uint64()
1081 (void) printf("got error %u from dmu_read\n", err); in dump_uint64()
1097 (void) printf("\t\t[]\n"); in dump_uint64()
1106 (void) printf(",\n\t\t%0llx", (u_longlong_t)arr[i]); in dump_uint64()
1110 (void) printf("]\n"); in dump_uint64()
1126 (void) printf("\n"); in dump_zap()
1136 *(uint64_t *)attrp->za_name); in dump_zap()
1138 (void) printf("\t\t%s = ", attrp->za_name); in dump_zap()
1140 if (attrp->za_num_integers == 0) { in dump_zap()
1141 (void) printf("\n"); in dump_zap()
1144 prop = umem_zalloc(attrp->za_num_integers * in dump_zap()
1145 attrp->za_integer_length, UMEM_NOFAIL); in dump_zap()
1149 (const uint64_t *)attrp->za_name, 1, in dump_zap()
1150 attrp->za_integer_length, attrp->za_num_integers, in dump_zap()
1153 (void) zap_lookup(os, object, attrp->za_name, in dump_zap()
1154 attrp->za_integer_length, attrp->za_num_integers, in dump_zap()
1157 if (attrp->za_integer_length == 1 && !key64) { in dump_zap()
1158 if (strcmp(attrp->za_name, in dump_zap()
1160 strcmp(attrp->za_name, in dump_zap()
1162 strcmp(attrp->za_name, DSL_CRYPTO_KEY_IV) == 0 || in dump_zap()
1163 strcmp(attrp->za_name, DSL_CRYPTO_KEY_MAC) == 0 || in dump_zap()
1164 strcmp(attrp->za_name, in dump_zap()
1168 for (i = 0; i < attrp->za_num_integers; i++) { in dump_zap()
1175 for (i = 0; i < attrp->za_num_integers; i++) { in dump_zap()
1176 switch (attrp->za_integer_length) { in dump_zap()
1196 (void) printf("\n"); in dump_zap()
1198 attrp->za_num_integers * attrp->za_integer_length); in dump_zap()
1219 zdb_nicenum(bpop->bpo_bytes, bytes, sizeof (bytes)); in dump_bpobj()
1220 zdb_nicenum(bpop->bpo_comp, comp, sizeof (comp)); in dump_bpobj()
1221 zdb_nicenum(bpop->bpo_uncomp, uncomp, sizeof (uncomp)); in dump_bpobj()
1223 (void) printf("\t\tnum_blkptrs = %llu\n", in dump_bpobj()
1224 (u_longlong_t)bpop->bpo_num_blkptrs); in dump_bpobj()
1225 (void) printf("\t\tbytes = %s\n", bytes); in dump_bpobj()
1227 (void) printf("\t\tcomp = %s\n", comp); in dump_bpobj()
1228 (void) printf("\t\tuncomp = %s\n", uncomp); in dump_bpobj()
1231 (void) printf("\t\tsubobjs = %llu\n", in dump_bpobj()
1232 (u_longlong_t)bpop->bpo_subobjs); in dump_bpobj()
1233 (void) printf("\t\tnum_subobjs = %llu\n", in dump_bpobj()
1234 (u_longlong_t)bpop->bpo_num_subobjs); in dump_bpobj()
1237 (void) printf("\t\tnum_freed = %llu\n", in dump_bpobj()
1238 (u_longlong_t)bpop->bpo_num_freed); in dump_bpobj()
1244 for (i = 0; i < bpop->bpo_num_blkptrs; i++) { in dump_bpobj()
1251 (void) printf("got error %u from dmu_read\n", err); in dump_bpobj()
1256 (void) printf("\t%s\n", blkbuf); in dump_bpobj()
1272 (void) printf("got error %u from dmu_read\n", err); in dump_bpobj_subobjs()
1277 int64_t last_nonzero = -1; in dump_bpobj_subobjs()
1284 (void) printf("\t%llu\n", (u_longlong_t)subobjs[i]); in dump_bpobj_subobjs()
1305 (void) printf("\n"); in dump_sa_attrs()
1310 (void) printf("\t\t%s = ", attrp->za_name); in dump_sa_attrs()
1311 if (attrp->za_num_integers == 0) { in dump_sa_attrs()
1312 (void) printf("\n"); in dump_sa_attrs()
1315 (void) printf(" %llx : [%d:%d:%d]\n", in dump_sa_attrs()
1316 (u_longlong_t)attrp->za_first_integer, in dump_sa_attrs()
1317 (int)ATTR_LENGTH(attrp->za_first_integer), in dump_sa_attrs()
1318 (int)ATTR_BSWAP(attrp->za_first_integer), in dump_sa_attrs()
1319 (int)ATTR_NUM(attrp->za_first_integer)); in dump_sa_attrs()
1335 (void) printf("\n"); in dump_sa_layouts()
1340 (void) printf("\t\t%s = [", attrp->za_name); in dump_sa_layouts()
1341 if (attrp->za_num_integers == 0) { in dump_sa_layouts()
1342 (void) printf("\n"); in dump_sa_layouts()
1346 VERIFY(attrp->za_integer_length == 2); in dump_sa_layouts()
1347 layout_attrs = umem_zalloc(attrp->za_num_integers * in dump_sa_layouts()
1348 attrp->za_integer_length, UMEM_NOFAIL); in dump_sa_layouts()
1350 VERIFY(zap_lookup(os, object, attrp->za_name, in dump_sa_layouts()
1351 attrp->za_integer_length, in dump_sa_layouts()
1352 attrp->za_num_integers, layout_attrs) == 0); in dump_sa_layouts()
1354 for (i = 0; i != attrp->za_num_integers; i++) in dump_sa_layouts()
1356 (void) printf("]\n"); in dump_sa_layouts()
1358 attrp->za_num_integers * attrp->za_integer_length); in dump_sa_layouts()
1390 (void) printf("\n"); in dump_zpldir()
1395 (void) printf("\t\t%s = %lld (type: %s)\n", in dump_zpldir()
1396 attrp->za_name, ZFS_DIRENT_OBJ(attrp->za_first_integer), in dump_zpldir()
1397 typenames[ZFS_DIRENT_TYPE(attrp->za_first_integer)]); in dump_zpldir()
1408 if (vd->vdev_ops->vdev_op_leaf) { in get_dtl_refcount()
1409 space_map_t *sm = vd->vdev_dtl_sm; in get_dtl_refcount()
1412 sm->sm_dbuf->db_size == sizeof (space_map_phys_t)) in get_dtl_refcount()
1417 for (unsigned c = 0; c < vd->vdev_children; c++) in get_dtl_refcount()
1418 refcount += get_dtl_refcount(vd->vdev_child[c]); in get_dtl_refcount()
1427 if (vd->vdev_top == vd) { in get_metaslab_refcount()
1428 for (uint64_t m = 0; m < vd->vdev_ms_count; m++) { in get_metaslab_refcount()
1429 space_map_t *sm = vd->vdev_ms[m]->ms_sm; in get_metaslab_refcount()
1432 sm->sm_dbuf->db_size == sizeof (space_map_phys_t)) in get_metaslab_refcount()
1436 for (unsigned c = 0; c < vd->vdev_children; c++) in get_metaslab_refcount()
1437 refcount += get_metaslab_refcount(vd->vdev_child[c]); in get_metaslab_refcount()
1449 if (vd->vdev_top == vd && obsolete_sm_object != 0) { in get_obsolete_refcount()
1451 VERIFY0(dmu_object_info(vd->vdev_spa->spa_meta_objset, in get_obsolete_refcount()
1457 ASSERT3P(vd->vdev_obsolete_sm, ==, NULL); in get_obsolete_refcount()
1460 for (unsigned c = 0; c < vd->vdev_children; c++) { in get_obsolete_refcount()
1461 refcount += get_obsolete_refcount(vd->vdev_child[c]); in get_obsolete_refcount()
1471 spa->spa_condensing_indirect_phys.scip_prev_obsolete_sm_object; in get_prev_obsolete_spacemap_refcount()
1474 VERIFY0(dmu_object_info(spa->spa_meta_objset, prev_obj, &doi)); in get_prev_obsolete_spacemap_refcount()
1487 if (vd->vdev_top == vd && vd->vdev_top_zap != 0 && in get_checkpoint_refcount()
1488 zap_contains(spa_meta_objset(vd->vdev_spa), in get_checkpoint_refcount()
1489 vd->vdev_top_zap, VDEV_TOP_ZAP_POOL_CHECKPOINT_SM) == 0) in get_checkpoint_refcount()
1492 for (uint64_t c = 0; c < vd->vdev_children; c++) in get_checkpoint_refcount()
1493 refcount += get_checkpoint_refcount(vd->vdev_child[c]); in get_checkpoint_refcount()
1501 return (avl_numnodes(&spa->spa_sm_logs_by_txg)); in get_log_spacemap_refcount()
1513 actual_refcount = get_dtl_refcount(spa->spa_root_vdev); in verify_spacemap_refcounts()
1514 actual_refcount += get_metaslab_refcount(spa->spa_root_vdev); in verify_spacemap_refcounts()
1515 actual_refcount += get_obsolete_refcount(spa->spa_root_vdev); in verify_spacemap_refcounts()
1517 actual_refcount += get_checkpoint_refcount(spa->spa_root_vdev); in verify_spacemap_refcounts()
1522 "actual %lld\n", in verify_spacemap_refcounts()
1539 (void) printf("space map object %llu:\n", in dump_spacemap()
1540 (longlong_t)sm->sm_object); in dump_spacemap()
1541 (void) printf(" smp_length = 0x%llx\n", in dump_spacemap()
1542 (longlong_t)sm->sm_phys->smp_length); in dump_spacemap()
1543 (void) printf(" smp_alloc = 0x%llx\n", in dump_spacemap()
1544 (longlong_t)sm->sm_phys->smp_alloc); in dump_spacemap()
1552 uint8_t mapshift = sm->sm_shift; in dump_spacemap()
1566 "\t [%6llu] PADDING\n", in dump_spacemap()
1570 "\t [%6llu] %s: txg %llu pass %llu\n", in dump_spacemap()
1588 sm->sm_start; in dump_spacemap()
1592 /* it is a two-word entry so we read another word */ in dump_spacemap()
1608 mapshift) + sm->sm_start; in dump_spacemap()
1613 " %010llx-%010llx size: %06llx vdev: %06llu words: %u\n", in dump_spacemap()
1623 alloc -= entry_run; in dump_spacemap()
1628 "with space map summary (%lld)\n", in dump_spacemap()
1637 zfs_range_tree_t *rt = msp->ms_allocatable; in dump_metaslab_stats()
1638 zfs_btree_t *t = &msp->ms_allocatable_by_size; in dump_metaslab_stats()
1639 int free_pct = zfs_range_tree_space(rt) * 100 / msp->ms_size; in dump_metaslab_stats()
1646 (void) printf("\t %25s %10lu %7s %6s %4s %4d%%\n", in dump_metaslab_stats()
1649 (void) printf("\tIn-memory histogram:\n"); in dump_metaslab_stats()
1650 dump_histogram(rt->rt_histogram, ZFS_RANGE_TREE_HISTOGRAM_SIZE, 0); in dump_metaslab_stats()
1656 vdev_t *vd = msp->ms_group->mg_vd; in dump_metaslab()
1657 spa_t *spa = vd->vdev_spa; in dump_metaslab()
1658 space_map_t *sm = msp->ms_sm; in dump_metaslab()
1661 zdb_nicenum(msp->ms_size - space_map_allocated(sm), freebuf, in dump_metaslab()
1665 "\tmetaslab %6llu offset %12llx spacemap %6llu free %5s\n", in dump_metaslab()
1666 (u_longlong_t)msp->ms_id, (u_longlong_t)msp->ms_start, in dump_metaslab()
1670 mutex_enter(&msp->ms_lock); in dump_metaslab()
1672 zfs_range_tree_stat_verify(msp->ms_allocatable); in dump_metaslab()
1675 mutex_exit(&msp->ms_lock); in dump_metaslab()
1684 (void) printf("\tOn-disk histogram:\t\tfragmentation %llu\n", in dump_metaslab()
1685 (u_longlong_t)msp->ms_fragmentation); in dump_metaslab()
1686 dump_histogram(sm->sm_phys->smp_histogram, in dump_metaslab()
1687 SPACE_MAP_HISTOGRAM_SIZE, sm->sm_shift); in dump_metaslab()
1690 if (vd->vdev_ops == &vdev_draid_ops) in dump_metaslab()
1691 ASSERT3U(msp->ms_size, <=, 1ULL << vd->vdev_ms_shift); in dump_metaslab()
1693 ASSERT3U(msp->ms_size, ==, 1ULL << vd->vdev_ms_shift); in dump_metaslab()
1695 dump_spacemap(spa->spa_meta_objset, msp->ms_sm); in dump_metaslab()
1698 (void) printf("\tFlush data:\n\tunflushed txg=%llu\n\n", in dump_metaslab()
1706 vdev_alloc_bias_t alloc_bias = vd->vdev_alloc_bias; in print_vdev_metaslab_header()
1708 if (alloc_bias == VDEV_BIAS_LOG || vd->vdev_islog) { in print_vdev_metaslab_header()
1717 if (vd->vdev_top_zap != 0) { in print_vdev_metaslab_header()
1718 int error = zap_lookup(spa_meta_objset(vd->vdev_spa), in print_vdev_metaslab_header()
1719 vd->vdev_top_zap, VDEV_TOP_ZAP_MS_UNFLUSHED_PHYS_TXGS, in print_vdev_metaslab_header()
1727 (u_longlong_t)vd->vdev_id, bias_str); in print_vdev_metaslab_header()
1734 (void) printf("\n\t%-10s%5llu %-19s %-15s %-12s\n", in print_vdev_metaslab_header()
1735 "metaslabs", (u_longlong_t)vd->vdev_ms_count, in print_vdev_metaslab_header()
1737 (void) printf("\t%15s %19s %15s %12s\n", in print_vdev_metaslab_header()
1738 "---------------", "-------------------", in print_vdev_metaslab_header()
1739 "---------------", "------------"); in print_vdev_metaslab_header()
1745 vdev_t *rvd = spa->spa_root_vdev; in dump_metaslab_groups()
1752 for (unsigned c = 0; c < rvd->vdev_children; c++) { in dump_metaslab_groups()
1753 vdev_t *tvd = rvd->vdev_child[c]; in dump_metaslab_groups()
1754 metaslab_group_t *mg = tvd->vdev_mg; in dump_metaslab_groups()
1756 if (mg == NULL || (mg->mg_class != mc && in dump_metaslab_groups()
1757 (!show_special || mg->mg_class != smc))) in dump_metaslab_groups()
1761 mg->mg_fragmentation = metaslab_group_fragmentation(mg); in dump_metaslab_groups()
1765 (u_longlong_t)tvd->vdev_id, in dump_metaslab_groups()
1766 (u_longlong_t)tvd->vdev_ms_count); in dump_metaslab_groups()
1767 if (mg->mg_fragmentation == ZFS_FRAG_INVALID) { in dump_metaslab_groups()
1768 (void) printf("%3s\n", "-"); in dump_metaslab_groups()
1770 (void) printf("%3llu%%\n", in dump_metaslab_groups()
1771 (u_longlong_t)mg->mg_fragmentation); in dump_metaslab_groups()
1773 dump_histogram(mg->mg_histogram, in dump_metaslab_groups()
1780 (void) printf("\t%3s\n", "-"); in dump_metaslab_groups()
1782 (void) printf("\t%3llu%%\n", (u_longlong_t)fragmentation); in dump_metaslab_groups()
1783 dump_histogram(mc->mc_histogram, ZFS_RANGE_TREE_HISTOGRAM_SIZE, 0); in dump_metaslab_groups()
1789 vdev_indirect_config_t *vic = &vd->vdev_indirect_config; in print_vdev_indirect()
1790 vdev_indirect_mapping_t *vim = vd->vdev_indirect_mapping; in print_vdev_indirect()
1791 vdev_indirect_births_t *vib = vd->vdev_indirect_births; in print_vdev_indirect()
1799 vic->vic_mapping_object); in print_vdev_indirect()
1801 vic->vic_births_object); in print_vdev_indirect()
1803 (void) printf("indirect births obj %llu:\n", in print_vdev_indirect()
1804 (longlong_t)vic->vic_births_object); in print_vdev_indirect()
1805 (void) printf(" vib_count = %llu\n", in print_vdev_indirect()
1809 &vib->vib_entries[i]; in print_vdev_indirect()
1810 (void) printf("\toffset %llx -> txg %llu\n", in print_vdev_indirect()
1811 (longlong_t)cur_vibe->vibe_offset, in print_vdev_indirect()
1812 (longlong_t)cur_vibe->vibe_phys_birth_txg); in print_vdev_indirect()
1814 (void) printf("\n"); in print_vdev_indirect()
1816 (void) printf("indirect mapping obj %llu:\n", in print_vdev_indirect()
1817 (longlong_t)vic->vic_mapping_object); in print_vdev_indirect()
1818 (void) printf(" vim_max_offset = 0x%llx\n", in print_vdev_indirect()
1820 (void) printf(" vim_bytes_mapped = 0x%llx\n", in print_vdev_indirect()
1822 (void) printf(" vim_count = %llu\n", in print_vdev_indirect()
1832 &vim->vim_entries[i]; in print_vdev_indirect()
1833 (void) printf("\t<%llx:%llx:%llx> -> " in print_vdev_indirect()
1834 "<%llx:%llx:%llx> (%x obsolete)\n", in print_vdev_indirect()
1835 (longlong_t)vd->vdev_id, in print_vdev_indirect()
1837 (longlong_t)DVA_GET_ASIZE(&vimep->vimep_dst), in print_vdev_indirect()
1838 (longlong_t)DVA_GET_VDEV(&vimep->vimep_dst), in print_vdev_indirect()
1839 (longlong_t)DVA_GET_OFFSET(&vimep->vimep_dst), in print_vdev_indirect()
1840 (longlong_t)DVA_GET_ASIZE(&vimep->vimep_dst), in print_vdev_indirect()
1843 (void) printf("\n"); in print_vdev_indirect()
1848 objset_t *mos = vd->vdev_spa->spa_meta_objset; in print_vdev_indirect() local
1849 (void) printf("obsolete space map object %llu:\n", in print_vdev_indirect()
1851 ASSERT(vd->vdev_obsolete_sm != NULL); in print_vdev_indirect()
1852 ASSERT3U(space_map_object(vd->vdev_obsolete_sm), ==, in print_vdev_indirect()
1854 dump_spacemap(mos, vd->vdev_obsolete_sm); in print_vdev_indirect()
1855 (void) printf("\n"); in print_vdev_indirect()
1862 vdev_t *vd, *rvd = spa->spa_root_vdev; in dump_metaslabs()
1863 uint64_t m, c = 0, children = rvd->vdev_children; in dump_metaslabs()
1865 (void) printf("\nMetaslabs:\n"); in dump_metaslabs()
1874 vd = rvd->vdev_child[c]; in dump_metaslabs()
1878 if (zopt_metaslab[m] < vd->vdev_ms_count) in dump_metaslabs()
1880 vd->vdev_ms[zopt_metaslab[m]]); in dump_metaslabs()
1883 "number %llu\n", in dump_metaslabs()
1886 (void) printf("\n"); in dump_metaslabs()
1892 vd = rvd->vdev_child[c]; in dump_metaslabs()
1897 for (m = 0; m < vd->vdev_ms_count; m++) in dump_metaslabs()
1898 dump_metaslab(vd->vdev_ms[m]); in dump_metaslabs()
1899 (void) printf("\n"); in dump_metaslabs()
1909 (void) printf("\nLog Space Maps in Pool:\n"); in dump_log_spacemaps()
1910 for (spa_log_sm_t *sls = avl_first(&spa->spa_sm_logs_by_txg); in dump_log_spacemaps()
1911 sls; sls = AVL_NEXT(&spa->spa_sm_logs_by_txg, sls)) { in dump_log_spacemaps()
1914 sls->sls_sm_obj, 0, UINT64_MAX, SPA_MINBLOCKSHIFT)); in dump_log_spacemaps()
1916 (void) printf("Log Spacemap object %llu txg %llu\n", in dump_log_spacemaps()
1917 (u_longlong_t)sls->sls_sm_obj, (u_longlong_t)sls->sls_txg); in dump_log_spacemaps()
1918 dump_spacemap(spa->spa_meta_objset, sm); in dump_log_spacemaps()
1921 (void) printf("\n"); in dump_log_spacemaps()
1928 const ddt_key_t *ddk = &ddlwe->ddlwe_key; in dump_ddt_entry()
1934 const ddt_univ_phys_t *ddp = &ddlwe->ddlwe_phys; in dump_ddt_entry()
1939 ddt_bp_create(ddt->ddt_checksum, ddk, ddp, v, &blk); in dump_ddt_entry()
1941 (void) printf("index %llx refcnt %llu phys %d %s\n", in dump_ddt_entry()
1952 if (dds->dds_blocks == 0) in dump_dedup_ratio()
1955 rL = (double)dds->dds_ref_lsize; in dump_dedup_ratio()
1956 rP = (double)dds->dds_ref_psize; in dump_dedup_ratio()
1957 rD = (double)dds->dds_ref_dsize; in dump_dedup_ratio()
1958 D = (double)dds->dds_dsize; in dump_dedup_ratio()
1965 "dedup * compress / copies = %.2f\n\n", in dump_dedup_ratio()
1972 if (ddt->ddt_version != DDT_VERSION_FDT || in dump_ddt_log()
1973 !(ddt->ddt_flags & DDT_FLAG_LOG)) in dump_ddt_log()
1976 for (int n = 0; n < 2; n++) { in dump_ddt_log() local
1977 ddt_log_t *ddl = &ddt->ddt_log[n]; in dump_ddt_log()
1980 if (ddl->ddl_flags > 0) { in dump_ddt_log()
1983 if (ddl->ddl_flags & DDL_FLAG_FLUSHING) in dump_ddt_log()
1985 sizeof (flagstr) - c); in dump_ddt_log()
1986 if (ddl->ddl_flags & DDL_FLAG_CHECKPOINT) in dump_ddt_log()
1988 sizeof (flagstr) - c); in dump_ddt_log()
1989 if (ddl->ddl_flags & in dump_ddt_log()
1992 sizeof (flagstr) - c); in dump_ddt_log()
1997 uint64_t count = avl_numnodes(&ddl->ddl_tree); in dump_ddt_log()
2000 "len=%llu; txg=%llu; entries=%llu\n", in dump_ddt_log()
2001 zio_checksum_table[ddt->ddt_checksum].ci_name, n, in dump_ddt_log()
2002 ddl->ddl_flags, flagstr, in dump_ddt_log()
2003 (u_longlong_t)ddl->ddl_object, in dump_ddt_log()
2004 (u_longlong_t)ddl->ddl_length, in dump_ddt_log()
2005 (u_longlong_t)ddl->ddl_first_txg, (u_longlong_t)count); in dump_ddt_log()
2007 if (ddl->ddl_flags & DDL_FLAG_CHECKPOINT) { in dump_ddt_log()
2008 const ddt_key_t *ddk = &ddl->ddl_checkpoint; in dump_ddt_log()
2010 "%016llx:%016llx:%016llx:%016llx:%016llx\n", in dump_ddt_log()
2011 (u_longlong_t)ddk->ddk_cksum.zc_word[0], in dump_ddt_log()
2012 (u_longlong_t)ddk->ddk_cksum.zc_word[1], in dump_ddt_log()
2013 (u_longlong_t)ddk->ddk_cksum.zc_word[2], in dump_ddt_log()
2014 (u_longlong_t)ddk->ddk_cksum.zc_word[3], in dump_ddt_log()
2015 (u_longlong_t)ddk->ddk_prop); in dump_ddt_log()
2023 for (ddt_log_entry_t *ddle = avl_first(&ddl->ddl_tree); in dump_ddt_log()
2024 ddle; ddle = AVL_NEXT(&ddl->ddl_tree, ddle)) { in dump_ddt_log()
2057 (void) printf("%s: dspace=%llu; mspace=%llu; entries=%llu\n", name, in dump_ddt_object()
2063 (void) printf("%s: object=%llu\n", name, in dump_ddt_object()
2064 (u_longlong_t)ddt->ddt_object[type][class]); in dump_ddt_object()
2065 zpool_dump_ddt(NULL, &ddt->ddt_histogram[type][class]); in dump_ddt_object()
2073 (void) printf("%s contents:\n\n", name); in dump_ddt_object()
2080 (void) printf("\n"); in dump_ddt_object()
2086 if (!ddt || ddt->ddt_version == DDT_VERSION_UNCONFIGURED) in dump_ddt()
2090 if (ddt->ddt_flags > 0) { in dump_ddt()
2093 if (ddt->ddt_flags & DDT_FLAG_FLAT) in dump_ddt()
2095 sizeof (flagstr) - c); in dump_ddt()
2096 if (ddt->ddt_flags & DDT_FLAG_LOG) in dump_ddt()
2098 sizeof (flagstr) - c); in dump_ddt()
2099 if (ddt->ddt_flags & ~DDT_FLAG_MASK) in dump_ddt()
2101 sizeof (flagstr) - c); in dump_ddt()
2106 printf("DDT-%s: version=%llu [%s]; flags=0x%02llx%s; rootobj=%llu\n", in dump_ddt()
2107 zio_checksum_table[ddt->ddt_checksum].ci_name, in dump_ddt()
2108 (u_longlong_t)ddt->ddt_version, in dump_ddt()
2109 (ddt->ddt_version == 0) ? "LEGACY" : in dump_ddt()
2110 (ddt->ddt_version == 1) ? "FDT" : "UNKNOWN", in dump_ddt()
2111 (u_longlong_t)ddt->ddt_flags, flagstr, in dump_ddt()
2112 (u_longlong_t)ddt->ddt_dir_object); in dump_ddt()
2128 dump_ddt(spa->spa_ddt[c]); in dump_all_ddts()
2133 (void) printf("All DDTs are empty\n"); in dump_all_ddts()
2137 (void) printf("\n"); in dump_all_ddts()
2140 (void) printf("DDT histogram (aggregated over all DDTs):\n"); in dump_all_ddts()
2153 (void) printf("DDT walk unique, building age histogram...\n"); in dump_all_ddts()
2160 (void) printf("%5s %9s %4s\n", in dump_all_ddts()
2162 (void) printf("%5s %9s %4s\n", in dump_all_ddts()
2163 "-----", "---------", "----"); in dump_all_ddts()
2165 (void) printf("%5d %9d %4d%%\n", 1 << i, in dump_all_ddts()
2178 printf("BRT: unsupported on this pool\n"); in dump_brt()
2183 printf("BRT: empty\n"); in dump_brt()
2191 printf("BRT: used %s; saved %s; ratio %llu.%02llux\n", used, saved, in dump_brt()
2197 for (uint64_t vdevid = 0; vdevid < spa->spa_brt_nvdevs; vdevid++) { in dump_brt()
2198 brt_vdev_t *brtvd = spa->spa_brt_vdevs[vdevid]; in dump_brt()
2199 if (!brtvd->bv_initiated) { in dump_brt()
2200 printf("BRT: vdev %" PRIu64 ": empty\n", vdevid); in dump_brt()
2204 zdb_nicenum(brtvd->bv_totalcount, count, sizeof (count)); in dump_brt()
2205 zdb_nicebytes(brtvd->bv_usedspace, used, sizeof (used)); in dump_brt()
2206 zdb_nicebytes(brtvd->bv_savedspace, saved, sizeof (saved)); in dump_brt()
2207 printf("BRT: vdev %" PRIu64 ": refcnt %s; used %s; saved %s\n", in dump_brt()
2214 /* -TTT shows a per-vdev histograms; -TTTT shows all entries */ in dump_brt()
2220 printf("\n%-16s %-10s\n", "DVA", "REFCNT"); in dump_brt()
2222 for (uint64_t vdevid = 0; vdevid < spa->spa_brt_nvdevs; vdevid++) { in dump_brt()
2223 brt_vdev_t *brtvd = spa->spa_brt_vdevs[vdevid]; in dump_brt()
2224 if (!brtvd->bv_initiated) in dump_brt()
2231 for (zap_cursor_init(&zc, spa->spa_meta_objset, in dump_brt()
2232 brtvd->bv_mos_entries); in dump_brt()
2236 VERIFY0(zap_lookup_uint64(spa->spa_meta_objset, in dump_brt()
2237 brtvd->bv_mos_entries, in dump_brt()
2238 (const uint64_t *)za->za_name, 1, in dump_brt()
2239 za->za_integer_length, za->za_num_integers, in dump_brt()
2246 *(const uint64_t *)za->za_name; in dump_brt()
2250 printf("%-16s %-10llu\n", dva, in dump_brt()
2259 ": DVAs with 2^n refcnts:\n", vdevid); in dump_brt()
2270 (void) printf("%s [%llu,%llu) length %llu\n", in dump_dtl_seg()
2280 spa_t *spa = vd->vdev_spa; in dump_dtl()
2291 (void) printf("\nDirty time logs:\n\n"); in dump_dtl()
2293 (void) printf("\t%*s%s [%s]\n", indent, "", in dump_dtl()
2294 vd->vdev_path ? vd->vdev_path : in dump_dtl()
2295 vd->vdev_parent ? vd->vdev_ops->vdev_op_type : spa_name(spa), in dump_dtl()
2296 required ? "DTL-required" : "DTL-expendable"); in dump_dtl()
2299 zfs_range_tree_t *rt = vd->vdev_dtl[t]; in dump_dtl()
2305 if (dump_opt['d'] > 5 && vd->vdev_children == 0) in dump_dtl()
2306 dump_spacemap(spa->spa_meta_objset, in dump_dtl()
2307 vd->vdev_dtl_sm); in dump_dtl()
2310 for (unsigned c = 0; c < vd->vdev_children; c++) in dump_dtl()
2311 dump_dtl(vd->vdev_child[c], indent + 4); in dump_dtl()
2325 (void) fprintf(stderr, "%s: unable to allocate I/O buffer\n", in dump_history()
2335 "error %d\n", error); in dump_history()
2343 off -= resid; in dump_history()
2346 (void) printf("\nHistory:\n"); in dump_history()
2363 (void) printf("%s %s\n", tbuf, in dump_history()
2373 (void) printf(" %s [internal %s txg:%ju] %s\n", in dump_history()
2396 (void) printf(" %s\n", fnvlist_lookup_string(events[i], in dump_history()
2399 (void) printf("%s ioctl %s\n", tbuf, in dump_history()
2404 (void) printf(" input:\n"); in dump_history()
2409 (void) printf(" output:\n"); in dump_history()
2414 (void) printf(" errno: %lld\n", in dump_history()
2426 (void) printf("unrecognized record:\n"); in dump_history()
2444 ASSERT(zb->zb_level < 0); in blkid2offset()
2445 if (zb->zb_object == 0) in blkid2offset()
2446 return (zb->zb_blkid); in blkid2offset()
2447 return (zb->zb_blkid * BP_GET_LSIZE(bp)); in blkid2offset()
2450 ASSERT(zb->zb_level >= 0); in blkid2offset()
2452 return ((zb->zb_blkid << in blkid2offset()
2453 (zb->zb_level * (dnp->dn_indblkshift - SPA_BLKPTRSHIFT))) * in blkid2offset()
2454 dnp->dn_datablkszsec << SPA_MINBLOCKSHIFT); in blkid2offset()
2476 (void) fprintf(stderr, "out of memory\n"); in snprintf_zstd_header()
2485 buflen - strlen(blkbuf), in snprintf_zstd_header()
2502 (void) fprintf(stderr, "read failed: %d\n", error); in snprintf_zstd_header()
2511 buflen - strlen(blkbuf), in snprintf_zstd_header()
2523 const dva_t *dva = bp->blk_dva; in snprintf_blkptr_compact()
2531 buflen - strlen(blkbuf), " %s", "FREE"); in snprintf_blkptr_compact()
2550 buflen - strlen(blkbuf), "%llu:%llx:%llx%s ", in snprintf_blkptr_compact()
2559 buflen - strlen(blkbuf), in snprintf_blkptr_compact()
2565 buflen - strlen(blkbuf), in snprintf_blkptr_compact()
2574 buflen - strlen(blkbuf), " %s", "FREE"); in snprintf_blkptr_compact()
2576 buflen - strlen(blkbuf), in snprintf_blkptr_compact()
2578 (u_longlong_t)bp->blk_cksum.zc_word[0], in snprintf_blkptr_compact()
2579 (u_longlong_t)bp->blk_cksum.zc_word[1], in snprintf_blkptr_compact()
2580 (u_longlong_t)bp->blk_cksum.zc_word[2], in snprintf_blkptr_compact()
2581 (u_longlong_t)bp->blk_cksum.zc_word[3]); in snprintf_blkptr_compact()
2593 ASSERT3U(BP_GET_TYPE(bp), ==, dnp->dn_type); in print_indirect()
2594 ASSERT3U(BP_GET_LEVEL(bp), ==, zb->zb_level); in print_indirect()
2599 ASSERT(zb->zb_level >= 0); in print_indirect()
2601 for (l = dnp->dn_nlevels - 1; l >= -1; l--) { in print_indirect()
2602 if (l == zb->zb_level) { in print_indirect()
2603 (void) printf("L%llx", (u_longlong_t)zb->zb_level); in print_indirect()
2612 (void) printf("%s\n", blkbuf); in print_indirect()
2639 ASSERT(buf->b_data); in visit_indirect()
2642 cbp = buf->b_data; in visit_indirect()
2646 SET_BOOKMARK(&czb, zb->zb_objset, zb->zb_object, in visit_indirect()
2647 zb->zb_level - 1, in visit_indirect()
2648 zb->zb_blkid * epb + i); in visit_indirect()
2665 dnode_phys_t *dnp = dn->dn_phys; in dump_indirect()
2668 (void) printf("Indirect blocks:\n"); in dump_indirect()
2670 SET_BOOKMARK(&czb, dmu_objset_id(dn->dn_objset), in dump_indirect()
2671 dn->dn_object, dnp->dn_nlevels - 1, 0); in dump_indirect()
2672 for (int j = 0; j < dnp->dn_nblkptr; j++) { in dump_indirect()
2674 (void) visit_indirect(dmu_objset_spa(dn->dn_objset), dnp, in dump_indirect()
2675 &dnp->dn_blkptr[j], &czb); in dump_indirect()
2678 (void) printf("\n"); in dump_indirect()
2697 crtime = dd->dd_creation_time; in dump_dsl_dir()
2699 (void) printf("\t\thead_dataset_obj = %llu\n", in dump_dsl_dir()
2700 (u_longlong_t)dd->dd_head_dataset_obj); in dump_dsl_dir()
2701 (void) printf("\t\tparent_dir_obj = %llu\n", in dump_dsl_dir()
2702 (u_longlong_t)dd->dd_parent_obj); in dump_dsl_dir()
2703 (void) printf("\t\torigin_obj = %llu\n", in dump_dsl_dir()
2704 (u_longlong_t)dd->dd_origin_obj); in dump_dsl_dir()
2705 (void) printf("\t\tchild_dir_zapobj = %llu\n", in dump_dsl_dir()
2706 (u_longlong_t)dd->dd_child_dir_zapobj); in dump_dsl_dir()
2707 zdb_nicenum(dd->dd_used_bytes, nice, sizeof (nice)); in dump_dsl_dir()
2708 (void) printf("\t\tused_bytes = %s\n", nice); in dump_dsl_dir()
2709 zdb_nicenum(dd->dd_compressed_bytes, nice, sizeof (nice)); in dump_dsl_dir()
2710 (void) printf("\t\tcompressed_bytes = %s\n", nice); in dump_dsl_dir()
2711 zdb_nicenum(dd->dd_uncompressed_bytes, nice, sizeof (nice)); in dump_dsl_dir()
2712 (void) printf("\t\tuncompressed_bytes = %s\n", nice); in dump_dsl_dir()
2713 zdb_nicenum(dd->dd_quota, nice, sizeof (nice)); in dump_dsl_dir()
2714 (void) printf("\t\tquota = %s\n", nice); in dump_dsl_dir()
2715 zdb_nicenum(dd->dd_reserved, nice, sizeof (nice)); in dump_dsl_dir()
2716 (void) printf("\t\treserved = %s\n", nice); in dump_dsl_dir()
2717 (void) printf("\t\tprops_zapobj = %llu\n", in dump_dsl_dir()
2718 (u_longlong_t)dd->dd_props_zapobj); in dump_dsl_dir()
2719 (void) printf("\t\tdeleg_zapobj = %llu\n", in dump_dsl_dir()
2720 (u_longlong_t)dd->dd_deleg_zapobj); in dump_dsl_dir()
2721 (void) printf("\t\tflags = %llx\n", in dump_dsl_dir()
2722 (u_longlong_t)dd->dd_flags); in dump_dsl_dir()
2725 zdb_nicenum(dd->dd_used_breakdown[DD_USED_ ## which], nice, \ in dump_dsl_dir()
2727 (void) printf("\t\tused_breakdown[" #which "] = %s\n", nice) in dump_dsl_dir()
2734 (void) printf("\t\tclones = %llu\n", in dump_dsl_dir()
2735 (u_longlong_t)dd->dd_clones); in dump_dsl_dir()
2759 crtime = ds->ds_creation_time; in dump_dsl_dataset()
2760 zdb_nicenum(ds->ds_referenced_bytes, used, sizeof (used)); in dump_dsl_dataset()
2761 zdb_nicenum(ds->ds_compressed_bytes, compressed, sizeof (compressed)); in dump_dsl_dataset()
2762 zdb_nicenum(ds->ds_uncompressed_bytes, uncompressed, in dump_dsl_dataset()
2764 zdb_nicenum(ds->ds_unique_bytes, unique, sizeof (unique)); in dump_dsl_dataset()
2765 snprintf_blkptr(blkbuf, sizeof (blkbuf), &ds->ds_bp); in dump_dsl_dataset()
2767 (void) printf("\t\tdir_obj = %llu\n", in dump_dsl_dataset()
2768 (u_longlong_t)ds->ds_dir_obj); in dump_dsl_dataset()
2769 (void) printf("\t\tprev_snap_obj = %llu\n", in dump_dsl_dataset()
2770 (u_longlong_t)ds->ds_prev_snap_obj); in dump_dsl_dataset()
2771 (void) printf("\t\tprev_snap_txg = %llu\n", in dump_dsl_dataset()
2772 (u_longlong_t)ds->ds_prev_snap_txg); in dump_dsl_dataset()
2773 (void) printf("\t\tnext_snap_obj = %llu\n", in dump_dsl_dataset()
2774 (u_longlong_t)ds->ds_next_snap_obj); in dump_dsl_dataset()
2775 (void) printf("\t\tsnapnames_zapobj = %llu\n", in dump_dsl_dataset()
2776 (u_longlong_t)ds->ds_snapnames_zapobj); in dump_dsl_dataset()
2777 (void) printf("\t\tnum_children = %llu\n", in dump_dsl_dataset()
2778 (u_longlong_t)ds->ds_num_children); in dump_dsl_dataset()
2779 (void) printf("\t\tuserrefs_obj = %llu\n", in dump_dsl_dataset()
2780 (u_longlong_t)ds->ds_userrefs_obj); in dump_dsl_dataset()
2782 (void) printf("\t\tcreation_txg = %llu\n", in dump_dsl_dataset()
2783 (u_longlong_t)ds->ds_creation_txg); in dump_dsl_dataset()
2784 (void) printf("\t\tdeadlist_obj = %llu\n", in dump_dsl_dataset()
2785 (u_longlong_t)ds->ds_deadlist_obj); in dump_dsl_dataset()
2786 (void) printf("\t\tused_bytes = %s\n", used); in dump_dsl_dataset()
2787 (void) printf("\t\tcompressed_bytes = %s\n", compressed); in dump_dsl_dataset()
2788 (void) printf("\t\tuncompressed_bytes = %s\n", uncompressed); in dump_dsl_dataset()
2789 (void) printf("\t\tunique = %s\n", unique); in dump_dsl_dataset()
2790 (void) printf("\t\tfsid_guid = %llu\n", in dump_dsl_dataset()
2791 (u_longlong_t)ds->ds_fsid_guid); in dump_dsl_dataset()
2792 (void) printf("\t\tguid = %llu\n", in dump_dsl_dataset()
2793 (u_longlong_t)ds->ds_guid); in dump_dsl_dataset()
2794 (void) printf("\t\tflags = %llx\n", in dump_dsl_dataset()
2795 (u_longlong_t)ds->ds_flags); in dump_dsl_dataset()
2796 (void) printf("\t\tnext_clones_obj = %llu\n", in dump_dsl_dataset()
2797 (u_longlong_t)ds->ds_next_clones_obj); in dump_dsl_dataset()
2798 (void) printf("\t\tprops_obj = %llu\n", in dump_dsl_dataset()
2799 (u_longlong_t)ds->ds_props_obj); in dump_dsl_dataset()
2800 (void) printf("\t\tbp = %s\n", blkbuf); in dump_dsl_dataset()
2811 (void) printf("\t%s\n", blkbuf); in dump_bptree_cb()
2830 bt = db->db_data; in dump_bptree()
2831 zdb_nicenum(bt->bt_bytes, bytes, sizeof (bytes)); in dump_bptree()
2832 (void) printf("\n %s: %llu datasets, %s\n", in dump_bptree()
2833 name, (unsigned long long)(bt->bt_end - bt->bt_begin), bytes); in dump_bptree()
2839 (void) printf("\n"); in dump_bptree()
2852 (void) printf("\t%s\n", blkbuf); in dump_bpobj_cb()
2872 zdb_nicenum(bpo->bpo_phys->bpo_bytes, bytes, sizeof (bytes)); in dump_full_bpobj()
2873 if (bpo->bpo_havesubobj && bpo->bpo_phys->bpo_subobjs != 0) { in dump_full_bpobj()
2874 zdb_nicenum(bpo->bpo_phys->bpo_comp, comp, sizeof (comp)); in dump_full_bpobj()
2875 zdb_nicenum(bpo->bpo_phys->bpo_uncomp, uncomp, sizeof (uncomp)); in dump_full_bpobj()
2876 if (bpo->bpo_havefreed) { in dump_full_bpobj()
2879 "%s (%s/%s comp)\n", in dump_full_bpobj()
2881 (u_longlong_t)bpo->bpo_object, in dump_full_bpobj()
2882 (u_longlong_t)bpo->bpo_phys->bpo_num_blkptrs, in dump_full_bpobj()
2883 (u_longlong_t)bpo->bpo_phys->bpo_num_freed, in dump_full_bpobj()
2884 (u_longlong_t)bpo->bpo_phys->bpo_num_subobjs, in dump_full_bpobj()
2885 (u_longlong_t)bpo->bpo_phys->bpo_subobjs, in dump_full_bpobj()
2890 "%s (%s/%s comp)\n", in dump_full_bpobj()
2892 (u_longlong_t)bpo->bpo_object, in dump_full_bpobj()
2893 (u_longlong_t)bpo->bpo_phys->bpo_num_blkptrs, in dump_full_bpobj()
2894 (u_longlong_t)bpo->bpo_phys->bpo_num_subobjs, in dump_full_bpobj()
2895 (u_longlong_t)bpo->bpo_phys->bpo_subobjs, in dump_full_bpobj()
2899 for (i = 0; i < bpo->bpo_phys->bpo_num_subobjs; i++) { in dump_full_bpobj()
2903 VERIFY0(dmu_read(bpo->bpo_os, in dump_full_bpobj()
2904 bpo->bpo_phys->bpo_subobjs, in dump_full_bpobj()
2906 error = bpobj_open(&subbpo, bpo->bpo_os, subobj); in dump_full_bpobj()
2909 "subobj id %llu\n", in dump_full_bpobj()
2917 if (bpo->bpo_havefreed) { in dump_full_bpobj()
2919 "%llu freed, %s\n", in dump_full_bpobj()
2921 (u_longlong_t)bpo->bpo_object, in dump_full_bpobj()
2922 (u_longlong_t)bpo->bpo_phys->bpo_num_blkptrs, in dump_full_bpobj()
2923 (u_longlong_t)bpo->bpo_phys->bpo_num_freed, in dump_full_bpobj()
2927 "%s\n", in dump_full_bpobj()
2929 (u_longlong_t)bpo->bpo_object, in dump_full_bpobj()
2930 (u_longlong_t)bpo->bpo_phys->bpo_num_blkptrs, in dump_full_bpobj()
2941 (void) printf("\n"); in dump_full_bpobj()
2951 objset_t *mos = dp->dp_spa->spa_meta_objset; in dump_bookmark() local
2960 "%llu redaction_obj: %llu}\n", (u_longlong_t)prop.zbm_guid, in dump_bookmark()
2973 redaction_list_phys_t *rlp = rl->rl_phys; in dump_bookmark()
2974 (void) printf("\tRedacted:\n\t\tProgress: "); in dump_bookmark()
2975 if (rlp->rlp_last_object != UINT64_MAX || in dump_bookmark()
2976 rlp->rlp_last_blkid != UINT64_MAX) { in dump_bookmark()
2977 (void) printf("%llu %llu (incomplete)\n", in dump_bookmark()
2978 (u_longlong_t)rlp->rlp_last_object, in dump_bookmark()
2979 (u_longlong_t)rlp->rlp_last_blkid); in dump_bookmark()
2981 (void) printf("complete\n"); in dump_bookmark()
2984 for (unsigned int i = 0; i < rlp->rlp_num_snaps; i++) { in dump_bookmark()
2988 (u_longlong_t)rlp->rlp_snaps[i]); in dump_bookmark()
2990 (void) printf("]\n\t\tLength: %llu\n", in dump_bookmark()
2991 (u_longlong_t)rlp->rlp_num_entries); in dump_bookmark()
2998 if (rlp->rlp_num_entries == 0) { in dump_bookmark()
3000 (void) printf("\t\tRedaction List: []\n\n"); in dump_bookmark()
3008 VERIFY0(dmu_object_info(mos, prop.zbm_redaction_obj, &doi)); in dump_bookmark()
3012 err = dmu_read(mos, prop.zbm_redaction_obj, 0, size, in dump_bookmark()
3027 for (size_t i = 1; i < rlp->rlp_num_entries; i++) { in dump_bookmark()
3028 (void) printf(",\n\t\t{object: %llx, offset: %llx, " in dump_bookmark()
3037 (void) printf("]\n\n"); in dump_bookmark()
3047 dsl_pool_t *dp = spa_get_dsl(os->os_spa); in dump_bookmarks()
3048 objset_t *mos = os->os_spa->spa_meta_objset; in dump_bookmarks() local
3054 for (zap_cursor_init(&zc, mos, ds->ds_bookmarks_obj); in dump_bookmarks()
3062 attrp->za_name); in dump_bookmarks()
3074 mos_obj_refd(bpo->bpo_object); in bpobj_count_refd()
3076 if (bpo->bpo_havesubobj && bpo->bpo_phys->bpo_subobjs != 0) { in bpobj_count_refd()
3077 mos_obj_refd(bpo->bpo_phys->bpo_subobjs); in bpobj_count_refd()
3078 for (uint64_t i = 0; i < bpo->bpo_phys->bpo_num_subobjs; i++) { in bpobj_count_refd()
3082 VERIFY0(dmu_read(bpo->bpo_os, in bpobj_count_refd()
3083 bpo->bpo_phys->bpo_subobjs, in bpobj_count_refd()
3085 error = bpobj_open(&subbpo, bpo->bpo_os, subobj); in bpobj_count_refd()
3088 "subobj id %llu\n", in bpobj_count_refd()
3102 uint64_t empty_bpobj = spa->spa_dsl_pool->dp_empty_bpobj; in dsl_deadlist_entry_count_refd()
3103 if (dle->dle_bpobj.bpo_object != empty_bpobj) in dsl_deadlist_entry_count_refd()
3104 bpobj_count_refd(&dle->dle_bpobj); in dsl_deadlist_entry_count_refd()
3115 "mintxg %llu -> obj %llu", in dsl_deadlist_entry_dump()
3116 (longlong_t)dle->dle_mintxg, in dsl_deadlist_entry_dump()
3117 (longlong_t)dle->dle_bpobj.bpo_object); in dsl_deadlist_entry_dump()
3119 dump_full_bpobj(&dle->dle_bpobj, buf, 0); in dsl_deadlist_entry_dump()
3121 (void) printf("mintxg %llu -> obj %llu\n", in dsl_deadlist_entry_dump()
3122 (longlong_t)dle->dle_mintxg, in dsl_deadlist_entry_dump()
3123 (longlong_t)dle->dle_bpobj.bpo_object); in dsl_deadlist_entry_dump()
3135 spa_t *spa = dmu_objset_spa(dl->dl_os); in dump_blkptr_list()
3136 uint64_t empty_bpobj = spa->spa_dsl_pool->dp_empty_bpobj; in dump_blkptr_list()
3138 if (dl->dl_oldfmt) { in dump_blkptr_list()
3139 if (dl->dl_bpobj.bpo_object != empty_bpobj) in dump_blkptr_list()
3140 bpobj_count_refd(&dl->dl_bpobj); in dump_blkptr_list()
3142 mos_obj_refd(dl->dl_object); in dump_blkptr_list()
3155 if (dl->dl_oldfmt) { in dump_blkptr_list()
3156 dump_full_bpobj(&dl->dl_bpobj, "old-format deadlist", 0); in dump_blkptr_list()
3160 zdb_nicenum(dl->dl_phys->dl_used, bytes, sizeof (bytes)); in dump_blkptr_list()
3161 zdb_nicenum(dl->dl_phys->dl_comp, comp, sizeof (comp)); in dump_blkptr_list()
3162 zdb_nicenum(dl->dl_phys->dl_uncomp, uncomp, sizeof (uncomp)); in dump_blkptr_list()
3163 zdb_nicenum(avl_numnodes(&dl->dl_tree), entries, sizeof (entries)); in dump_blkptr_list()
3164 (void) printf("\n %s: %s (%s/%s comp), %s entries\n", in dump_blkptr_list()
3170 (void) putchar('\n'); in dump_blkptr_list()
3179 dsl_pool_t *dp = spa_get_dsl(os->os_spa); in verify_dd_livelist()
3180 dsl_dir_t *dd = os->os_dsl_dataset->ds_dir; in verify_dd_livelist()
3183 if (!dsl_deadlist_is_open(&dd->dd_livelist)) in verify_dd_livelist()
3187 dsl_deadlist_iterate(&dd->dd_livelist, sublivelist_verify_lightweight, in verify_dd_livelist()
3191 dsl_deadlist_space(&dd->dd_livelist, &ll_used, in verify_dd_livelist()
3197 dsl_dir_phys(dd)->dd_origin_obj, FTAG, &origin_ds)); in verify_dd_livelist()
3198 VERIFY0(dsl_dataset_space_written(origin_ds, os->os_dsl_dataset, in verify_dd_livelist()
3208 (void) printf("Discrepancy in space accounting:\n"); in verify_dd_livelist()
3212 (void) printf("dir: used %s, comp %s, uncomp %s\n", in verify_dd_livelist()
3217 (void) printf("livelist: used %s, comp %s, uncomp %s\n", in verify_dd_livelist()
3233 VERIFY0(zap_lookup(dd->dd_pool->dp_meta_objset, dd->dd_crypto_obj, in zdb_derive_key()
3250 VERIFY0(zap_lookup(dd->dd_pool->dp_meta_objset, in zdb_derive_key()
3251 dd->dd_crypto_obj, zfs_prop_to_name(ZFS_PROP_PBKDF2_SALT), in zdb_derive_key()
3253 VERIFY0(zap_lookup(dd->dd_pool->dp_meta_objset, in zdb_derive_key()
3254 dd->dd_crypto_obj, zfs_prop_to_name(ZFS_PROP_PBKDF2_ITERS), in zdb_derive_key()
3265 fatal("no support for key format %u\n", in zdb_derive_key()
3284 dp = spa_get_dsl(os->os_spa); in zdb_load_key()
3285 dd = os->os_dsl_dataset->ds_dir; in zdb_load_key()
3288 VERIFY0(zap_lookup(dd->dd_pool->dp_meta_objset, dd->dd_crypto_obj, in zdb_load_key()
3290 VERIFY0(dsl_dir_hold_obj(dd->dd_pool, rddobj, NULL, FTAG, &rdd)); in zdb_load_key()
3322 printf("Unlocked encryption root: %s\n", encroot); in zdb_load_key()
3362 "'%s': %s\n", in open_objset()
3381 (void) fprintf(stderr, "failed to hold dataset '%s': %s\n", in open_objset()
3389 (key_loaded || !(*osp)->os_encrypted)) { in open_objset()
3399 (void) fprintf(stderr, "sa_setup failed: %s\n", in open_objset()
3416 if (os->os_sa != NULL) in close_objset()
3451 ddt_t *ddt = spa->spa_ddt[c]; in zdb_ddt_cleanup()
3457 ddt_entry_t *dde = avl_first(&ddt->ddt_tree), *next; in zdb_ddt_cleanup()
3459 next = AVL_NEXT(&ddt->ddt_tree, dde); in zdb_ddt_cleanup()
3460 dde->dde_io = NULL; in zdb_ddt_cleanup()
3493 * the domain-rid string.
3501 (void) printf("\t%s %llx [%s-%d]\n", id_type, in print_idstr()
3504 (void) printf("\t%s %llu\n", id_type, (u_longlong_t)id); in print_idstr()
3568 (void) printf("\tSA xattrs: %d bytes, %d entries\n\n", in dump_znode_sa_xattr()
3591 (void) putchar('\n'); in dump_znode_sa_xattr()
3610 (void) printf("symlink size %d is too large\n", in dump_znode_symlink()
3617 (void) printf("\ttarget %s\n", linktarget); in dump_znode_symlink()
3637 (void) printf("Failed to get handle for SA znode\n"); in dump_znode()
3682 (void) printf("\tpath %s\n", path); in dump_znode()
3692 (void) printf("\tgen %llu\n", (u_longlong_t)gen); in dump_znode()
3693 (void) printf("\tmode %llo\n", (u_longlong_t)mode); in dump_znode()
3694 (void) printf("\tsize %llu\n", (u_longlong_t)fsize); in dump_znode()
3695 (void) printf("\tparent %llu\n", (u_longlong_t)parent); in dump_znode()
3696 (void) printf("\tlinks %llu\n", (u_longlong_t)links); in dump_znode()
3697 (void) printf("\tpflags %llx\n", (u_longlong_t)pflags); in dump_znode()
3703 (void) printf("\tprojid %llu\n", (u_longlong_t)projid); in dump_znode()
3707 (void) printf("\txattr %llu\n", (u_longlong_t)xattr); in dump_znode()
3710 (void) printf("\trdev 0x%016llx\n", (u_longlong_t)rdev); in dump_znode()
3812 * set, the user combined the all-types flag (A) with in match_object_type()
3813 * a negated flag to exclude some types (e.g. A-f to in match_object_type()
3849 (void) printf("\n%10s %3s %5s %5s %5s %6s %5s %6s %s\n", in dump_object()
3868 if (!key_loaded && os->os_encrypted && in dump_object()
3879 bonus = db->db_data; in dump_object()
3880 bsize = db->db_size; in dump_object()
3908 (void) snprintf(aux + strlen(aux), sizeof (aux) - strlen(aux), in dump_object()
3913 ZIO_COMPRESS_HASLEVEL(os->os_compress) && verbosity >= 6) { in dump_object()
3916 ZIO_COMPRESS_RAW(os->os_compress, os->os_complevel), in dump_object()
3919 sizeof (aux) - strlen(aux), " (Z=inherit=%s)", in dump_object()
3923 sizeof (aux) - strlen(aux), in dump_object()
3924 " (Z=inherit=%s-unknown)", in dump_object()
3925 ZDB_COMPRESS_NAME(os->os_compress)); in dump_object()
3928 (void) snprintf(aux + strlen(aux), sizeof (aux) - strlen(aux), in dump_object()
3929 " (Z=inherit=%s)", ZDB_COMPRESS_NAME(os->os_compress)); in dump_object()
3931 (void) snprintf(aux + strlen(aux), sizeof (aux) - strlen(aux), in dump_object()
3935 (void) printf("%10lld %3u %5s %5s %5s %6s %5s %6s %s%s\n", in dump_object()
3940 (void) printf("%10s %3s %5s %5s %5s %5s %5s %6s %s\n", in dump_object()
3946 (void) printf("\tdnode flags: %s%s%s%s\n", in dump_object()
3947 (dn->dn_phys->dn_flags & DNODE_FLAG_USED_BYTES) ? in dump_object()
3949 (dn->dn_phys->dn_flags & DNODE_FLAG_USERUSED_ACCOUNTED) ? in dump_object()
3951 (dn->dn_phys->dn_flags & DNODE_FLAG_USEROBJUSED_ACCOUNTED) ? in dump_object()
3953 (dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR) ? in dump_object()
3955 (void) printf("\tdnode maxblkid: %llu\n", in dump_object()
3956 (longlong_t)dn->dn_phys->dn_maxblkid); in dump_object()
3962 (void) printf("\t\t(bonus encrypted)\n"); in dump_object()
3966 (!os->os_encrypted || !DMU_OT_IS_ENCRYPTED(doi.doi_type))) { in dump_object()
3970 (void) printf("\t\t(object encrypted)\n"); in dump_object()
3977 if (dn->dn_phys->dn_flags & DNODE_FLAG_SPILL_BLKPTR) { in dump_object()
3980 DN_SPILL_BLKPTR(dn->dn_phys), B_FALSE); in dump_object()
3981 (void) printf("\nSpill block: %s\n", blkbuf); in dump_object()
3995 if (dn->dn_type == DMU_OT_DNODE) { in dump_object()
4012 zdb_nicenum(end - start, segsize, sizeof (segsize)); in dump_object()
4014 " size %5s\n", (u_longlong_t)start, in dump_object()
4032 mos_obj_refd(dd->dd_object); in count_dir_mos_objects()
4033 mos_obj_refd(dsl_dir_phys(dd)->dd_child_dir_zapobj); in count_dir_mos_objects()
4034 mos_obj_refd(dsl_dir_phys(dd)->dd_deleg_zapobj); in count_dir_mos_objects()
4035 mos_obj_refd(dsl_dir_phys(dd)->dd_props_zapobj); in count_dir_mos_objects()
4036 mos_obj_refd(dsl_dir_phys(dd)->dd_clones); in count_dir_mos_objects()
4042 mos_obj_refd_multiple(dd->dd_crypto_obj); in count_dir_mos_objects()
4048 mos_obj_refd(ds->ds_object); in count_ds_mos_objects()
4049 mos_obj_refd(dsl_dataset_phys(ds)->ds_next_clones_obj); in count_ds_mos_objects()
4050 mos_obj_refd(dsl_dataset_phys(ds)->ds_props_obj); in count_ds_mos_objects()
4051 mos_obj_refd(dsl_dataset_phys(ds)->ds_userrefs_obj); in count_ds_mos_objects()
4052 mos_obj_refd(dsl_dataset_phys(ds)->ds_snapnames_zapobj); in count_ds_mos_objects()
4053 mos_obj_refd(ds->ds_bookmarks_obj); in count_ds_mos_objects()
4056 count_dir_mos_objects(ds->ds_dir); in count_ds_mos_objects()
4079 zor->zor_obj_start = strtoull(range, &p, 0); in parse_object_range()
4084 zor->zor_obj_start = ZDB_MAP_OBJECT_ID(zor->zor_obj_start); in parse_object_range()
4085 zor->zor_obj_end = zor->zor_obj_start; in parse_object_range()
4096 if (range[len - 1] == ':') { in parse_object_range()
4104 zor->zor_obj_start = strtoull(s, &p, 0); in parse_object_range()
4113 zor->zor_obj_end = strtoull(s, &p, 0); in parse_object_range()
4121 if (zor->zor_obj_start > zor->zor_obj_end) { in parse_object_range()
4129 zor->zor_flags = ZOR_FLAG_ALL_TYPES; in parse_object_range()
4132 *msg = "Invalid colon-delimited field after flags"; in parse_object_range()
4140 boolean_t negation = (flagstr[i] == '-'); in parse_object_range()
4161 zor->zor_flags = flags; in parse_object_range()
4163 zor->zor_obj_start = ZDB_MAP_OBJECT_ID(zor->zor_obj_start); in parse_object_range()
4164 zor->zor_obj_end = ZDB_MAP_OBJECT_ID(zor->zor_obj_end); in parse_object_range()
4206 usedobjs = BP_GET_FILL(os->os_rootbp); in dump_objset()
4207 refdbytes = dsl_dir_phys(os->os_spa->spa_dsl_pool->dp_mos_dir)-> in dump_objset()
4213 ASSERT3U(usedobjs, ==, BP_GET_FILL(os->os_rootbp)); in dump_objset()
4220 sizeof (blkbuf) - strlen(blkbuf), os->os_rootbp); in dump_objset()
4228 "%s, %llu objects%s%s\n", in dump_objset()
4244 object--; in dump_objset()
4254 (void) printf("\n"); in dump_objset()
4263 dump_blkptr_list(&ds->ds_deadlist, "Deadlist"); in dump_objset()
4264 if (dsl_deadlist_is_open(&ds->ds_dir->dd_livelist) && in dump_objset()
4266 dump_blkptr_list(&ds->ds_dir->dd_livelist, "Livelist"); in dump_objset()
4272 (void) printf("ds_remap_deadlist:\n"); in dump_objset()
4273 dump_blkptr_list(&ds->ds_remap_deadlist, "Deadlist"); in dump_objset()
4284 if (BP_IS_HOLE(os->os_rootbp)) in dump_objset()
4290 DMU_USERUSED_DNODE(os)->dn_type != 0) { in dump_objset()
4298 DMU_PROJECTUSED_DNODE(os)->dn_type != 0) in dump_objset()
4308 max_slot_used = object + dnode_slots - 1; in dump_objset()
4311 (void) printf("\n"); in dump_objset()
4313 (void) printf(" Dnode slots:\n"); in dump_objset()
4314 (void) printf("\tTotal used: %10llu\n", in dump_objset()
4316 (void) printf("\tMax used: %10llu\n", in dump_objset()
4318 (void) printf("\tPercent empty: %10lf\n", in dump_objset()
4319 (double)(max_slot_used - total_slots_used)*100 / in dump_objset()
4321 (void) printf("\n"); in dump_objset()
4324 (void) fprintf(stderr, "dmu_object_next() = %d\n", error); in dump_objset()
4331 (void) printf("%d potentially leaked objects detected\n", in dump_objset()
4340 time_t timestamp = ub->ub_timestamp; in dump_uberblock()
4343 (void) printf("\tmagic = %016llx\n", (u_longlong_t)ub->ub_magic); in dump_uberblock()
4344 (void) printf("\tversion = %llu\n", (u_longlong_t)ub->ub_version); in dump_uberblock()
4345 (void) printf("\ttxg = %llu\n", (u_longlong_t)ub->ub_txg); in dump_uberblock()
4346 (void) printf("\tguid_sum = %llu\n", (u_longlong_t)ub->ub_guid_sum); in dump_uberblock()
4348 (u_longlong_t)ub->ub_timestamp, ctime(×tamp)); in dump_uberblock()
4351 snprintf_blkptr(blkbuf, sizeof (blkbuf), &ub->ub_rootbp); in dump_uberblock()
4352 (void) printf("\tbp = %s\n", blkbuf); in dump_uberblock()
4354 (void) printf("\tmmp_magic = %016llx\n", in dump_uberblock()
4355 (u_longlong_t)ub->ub_mmp_magic); in dump_uberblock()
4357 (void) printf("\tmmp_delay = %0llu\n", in dump_uberblock()
4358 (u_longlong_t)ub->ub_mmp_delay); in dump_uberblock()
4360 (void) printf("\tmmp_seq = %u\n", in dump_uberblock()
4363 (void) printf("\tmmp_fail = %u\n", in dump_uberblock()
4366 (void) printf("\tmmp_write = %u\n", in dump_uberblock()
4369 (void) printf("\tmmp_valid = %x\n", in dump_uberblock()
4370 (unsigned int) ub->ub_mmp_config & 0xFF); in dump_uberblock()
4375 snprintf_blkptr(blkbuf, sizeof (blkbuf), &ub->ub_rootbp); in dump_uberblock()
4376 (void) printf("\trootbp = %s\n", blkbuf); in dump_uberblock()
4378 (void) printf("\tcheckpoint_txg = %llu\n", in dump_uberblock()
4379 (u_longlong_t)ub->ub_checkpoint_txg); in dump_uberblock()
4381 (void) printf("\traidz_reflow state=%u off=%llu\n", in dump_uberblock()
4396 error = dmu_bonus_hold(spa->spa_meta_objset, in dump_config()
4397 spa->spa_config_object, FTAG, &db); in dump_config()
4400 nvsize = *(uint64_t *)db->db_data; in dump_config()
4403 (void) printf("\nMOS Configuration:\n"); in dump_config()
4404 dump_packed_nvlist(spa->spa_meta_objset, in dump_config()
4405 spa->spa_config_object, (void *)&nvsize, 1); in dump_config()
4408 (u_longlong_t)spa->spa_config_object, error); in dump_config()
4421 (void) printf("cannot open '%s': %s\n", cachefile, in dump_cachefile()
4427 (void) printf("failed to stat '%s': %s\n", cachefile, in dump_cachefile()
4433 (void) fprintf(stderr, "failed to allocate %llu bytes\n", in dump_cachefile()
4439 (void) fprintf(stderr, "failed to read %llu bytes\n", in dump_cachefile()
4447 (void) fprintf(stderr, "failed to unpack nvlist\n"); in dump_cachefile()
4479 stats->zns_list_count++; in collect_nvlist_stats()
4486 fnvlist_add_string(stats->zns_string, name, in collect_nvlist_stats()
4490 fnvlist_add_uint64(stats->zns_uint64, name, in collect_nvlist_stats()
4494 fnvlist_add_boolean(stats->zns_boolean, name); in collect_nvlist_stats()
4513 stats->zns_leaf_total += size; in collect_nvlist_stats()
4514 if (size > stats->zns_leaf_largest) in collect_nvlist_stats()
4515 stats->zns_leaf_largest = size; in collect_nvlist_stats()
4516 stats->zns_leaf_count++; in collect_nvlist_stats()
4521 (void) printf("skip type %d!\n", (int)nvpair_type(nvp)); in collect_nvlist_stats()
4533 /* requires nvlist with non-unique names for stat collection */ in dump_nvlist_stats()
4539 (void) printf("\n\nZFS Label NVList Config Stats:\n"); in dump_nvlist_stats()
4542 (void) printf(" %d bytes used, %d bytes free (using %4.1f%%)\n\n", in dump_nvlist_stats()
4543 (int)total, (int)(cap - total), 100.0 * total / cap); in dump_nvlist_stats()
4548 size -= noise; in dump_nvlist_stats()
4550 (void) printf("%12s %4d %6d bytes (%5.2f%%)\n", "integers:", in dump_nvlist_stats()
4555 size -= noise; in dump_nvlist_stats()
4557 (void) printf("%12s %4d %6d bytes (%5.2f%%)\n", "strings:", in dump_nvlist_stats()
4562 size -= noise; in dump_nvlist_stats()
4564 (void) printf("%12s %4d %6d bytes (%5.2f%%)\n", "booleans:", in dump_nvlist_stats()
4568 size = total - sum; /* treat remainder as nvlist overhead */ in dump_nvlist_stats()
4569 (void) printf("%12s %4d %6d bytes (%5.2f%%)\n\n", "nvlists:", in dump_nvlist_stats()
4575 (void) printf("%12s %4d %6d bytes average\n", "leaf vdevs:", in dump_nvlist_stats()
4577 (void) printf("%24d bytes largest\n", in dump_nvlist_stats()
4581 (void) printf(" space for %d additional leaf vdevs\n", in dump_nvlist_stats()
4582 (int)((cap - total) / average)); in dump_nvlist_stats()
4584 (void) printf("\n"); in dump_nvlist_stats()
4602 int arraysize = ARRAY_SIZE(l->cksum.zc_word); in cksum_record_compare()
4606 difference = TREE_CMP(l->cksum.zc_word[i], r->cksum.zc_word[i]); in cksum_record_compare()
4620 rec->cksum = *cksum; in cksum_record_alloc()
4621 rec->labels[l] = B_TRUE; in cksum_record_alloc()
4642 rec->labels[l] = B_TRUE; in cksum_record_insert()
4655 if (rec->labels[i]) in first_label()
4658 return (-1); in first_label()
4666 if (rec->labels[i] == B_TRUE) in print_label_numbers()
4668 putchar('\n'); in print_label_numbers()
4691 if (label->header_printed == B_TRUE) in print_label_header()
4694 (void) printf("------------------------------------\n"); in print_label_header()
4695 (void) printf("LABEL %d %s\n", l, in print_label_header()
4696 label->cksum_valid ? "" : "(Bad label cksum)"); in print_label_header()
4697 (void) printf("------------------------------------\n"); in print_label_header()
4699 label->header_printed = B_TRUE; in print_label_header()
4705 (void) printf("------------------------------------\n"); in print_l2arc_header()
4706 (void) printf("L2ARC device header\n"); in print_l2arc_header()
4707 (void) printf("------------------------------------\n"); in print_l2arc_header()
4713 (void) printf("------------------------------------\n"); in print_l2arc_log_blocks()
4714 (void) printf("L2ARC device log blocks\n"); in print_l2arc_log_blocks()
4715 (void) printf("------------------------------------\n"); in print_l2arc_log_blocks()
4725 "vdev: %llu, offset: %llu\n", in dump_l2arc_log_entries()
4730 (void) printf("|\t\t\t\tbirth: %llu\n", in dump_l2arc_log_entries()
4732 (void) printf("|\t\t\t\tlsize: %llu\n", in dump_l2arc_log_entries()
4733 (u_longlong_t)L2BLK_GET_LSIZE((&le[j])->le_prop)); in dump_l2arc_log_entries()
4734 (void) printf("|\t\t\t\tpsize: %llu\n", in dump_l2arc_log_entries()
4735 (u_longlong_t)L2BLK_GET_PSIZE((&le[j])->le_prop)); in dump_l2arc_log_entries()
4736 (void) printf("|\t\t\t\tcompr: %llu\n", in dump_l2arc_log_entries()
4737 (u_longlong_t)L2BLK_GET_COMPRESS((&le[j])->le_prop)); in dump_l2arc_log_entries()
4738 (void) printf("|\t\t\t\tcomplevel: %llu\n", in dump_l2arc_log_entries()
4739 (u_longlong_t)(&le[j])->le_complevel); in dump_l2arc_log_entries()
4740 (void) printf("|\t\t\t\ttype: %llu\n", in dump_l2arc_log_entries()
4741 (u_longlong_t)L2BLK_GET_TYPE((&le[j])->le_prop)); in dump_l2arc_log_entries()
4742 (void) printf("|\t\t\t\tprotected: %llu\n", in dump_l2arc_log_entries()
4743 (u_longlong_t)L2BLK_GET_PROTECTED((&le[j])->le_prop)); in dump_l2arc_log_entries()
4744 (void) printf("|\t\t\t\tprefetch: %llu\n", in dump_l2arc_log_entries()
4745 (u_longlong_t)L2BLK_GET_PREFETCH((&le[j])->le_prop)); in dump_l2arc_log_entries()
4746 (void) printf("|\t\t\t\taddress: %llu\n", in dump_l2arc_log_entries()
4748 (void) printf("|\t\t\t\tARC state: %llu\n", in dump_l2arc_log_entries()
4749 (u_longlong_t)L2BLK_GET_STATE((&le[j])->le_prop)); in dump_l2arc_log_entries()
4750 (void) printf("|\n"); in dump_l2arc_log_entries()
4752 (void) printf("\n"); in dump_l2arc_log_entries()
4758 (void) printf("|\t\tdaddr: %llu\n", (u_longlong_t)lbps->lbp_daddr); in dump_l2arc_log_blkptr()
4759 (void) printf("|\t\tpayload_asize: %llu\n", in dump_l2arc_log_blkptr()
4760 (u_longlong_t)lbps->lbp_payload_asize); in dump_l2arc_log_blkptr()
4761 (void) printf("|\t\tpayload_start: %llu\n", in dump_l2arc_log_blkptr()
4762 (u_longlong_t)lbps->lbp_payload_start); in dump_l2arc_log_blkptr()
4763 (void) printf("|\t\tlsize: %llu\n", in dump_l2arc_log_blkptr()
4764 (u_longlong_t)L2BLK_GET_LSIZE(lbps->lbp_prop)); in dump_l2arc_log_blkptr()
4765 (void) printf("|\t\tasize: %llu\n", in dump_l2arc_log_blkptr()
4766 (u_longlong_t)L2BLK_GET_PSIZE(lbps->lbp_prop)); in dump_l2arc_log_blkptr()
4767 (void) printf("|\t\tcompralgo: %llu\n", in dump_l2arc_log_blkptr()
4768 (u_longlong_t)L2BLK_GET_COMPRESS(lbps->lbp_prop)); in dump_l2arc_log_blkptr()
4769 (void) printf("|\t\tcksumalgo: %llu\n", in dump_l2arc_log_blkptr()
4770 (u_longlong_t)L2BLK_GET_CHECKSUM(lbps->lbp_prop)); in dump_l2arc_log_blkptr()
4771 (void) printf("|\n\n"); in dump_l2arc_log_blkptr()
4787 memcpy(lbps, l2dhdr->dh_start_lbps, sizeof (lbps)); in dump_l2arc_log_blocks()
4789 dev.l2ad_evict = l2dhdr->dh_evict; in dump_l2arc_log_blocks()
4790 dev.l2ad_start = l2dhdr->dh_start; in dump_l2arc_log_blocks()
4791 dev.l2ad_end = l2dhdr->dh_end; in dump_l2arc_log_blocks()
4793 if (l2dhdr->dh_start_lbps[0].lbp_daddr == 0) { in dump_l2arc_log_blocks()
4796 (void) printf("No log blocks to read\n"); in dump_l2arc_log_blocks()
4797 (void) printf("\n"); in dump_l2arc_log_blocks()
4802 L2BLK_GET_PSIZE((&lbps[0])->lbp_prop); in dump_l2arc_log_blocks()
4805 dev.l2ad_first = !!(l2dhdr->dh_flags & L2ARC_DEV_HDR_EVICT_FIRST); in dump_l2arc_log_blocks()
4812 asize = L2BLK_GET_PSIZE((&lbps[0])->lbp_prop); in dump_l2arc_log_blocks()
4816 "block\n\n"); in dump_l2arc_log_blocks()
4825 (void) printf("Invalid cksum\n"); in dump_l2arc_log_blocks()
4831 switch (L2BLK_GET_COMPRESS((&lbps[0])->lbp_prop)) { in dump_l2arc_log_blocks()
4841 (&lbps[0])->lbp_prop), abd, &dabd, in dump_l2arc_log_blocks()
4847 "failed\n"); in dump_l2arc_log_blocks()
4858 (void) printf("Invalid log block magic\n\n"); in dump_l2arc_log_blocks()
4862 rebuild->dh_lb_count++; in dump_l2arc_log_blocks()
4863 rebuild->dh_lb_asize += asize; in dump_l2arc_log_blocks()
4865 (void) printf("lb[%4llu]\tmagic: %llu\n", in dump_l2arc_log_blocks()
4866 (u_longlong_t)rebuild->dh_lb_count, in dump_l2arc_log_blocks()
4872 dump_l2arc_log_entries(l2dhdr->dh_log_entries, in dump_l2arc_log_blocks()
4874 rebuild->dh_lb_count); in dump_l2arc_log_blocks()
4886 (void) printf("log_blk_count:\t %llu with valid cksum\n", in dump_l2arc_log_blocks()
4887 (u_longlong_t)rebuild->dh_lb_count); in dump_l2arc_log_blocks()
4888 (void) printf("\t\t %d with invalid cksum\n", failed); in dump_l2arc_log_blocks()
4889 (void) printf("log_blk_asize:\t %llu\n\n", in dump_l2arc_log_blocks()
4890 (u_longlong_t)rebuild->dh_lb_asize); in dump_l2arc_log_blocks()
4912 (void) printf("L2ARC device header not found\n\n"); in dump_l2arc_header()
4918 (void) printf(" magic: %llu\n", in dump_l2arc_header()
4920 (void) printf(" version: %llu\n", in dump_l2arc_header()
4922 (void) printf(" pool_guid: %llu\n", in dump_l2arc_header()
4924 (void) printf(" flags: %llu\n", in dump_l2arc_header()
4926 (void) printf(" start_lbps[0]: %llu\n", in dump_l2arc_header()
4929 (void) printf(" start_lbps[1]: %llu\n", in dump_l2arc_header()
4932 (void) printf(" log_blk_ent: %llu\n", in dump_l2arc_header()
4934 (void) printf(" start: %llu\n", in dump_l2arc_header()
4936 (void) printf(" end: %llu\n", in dump_l2arc_header()
4938 (void) printf(" evict: %llu\n", in dump_l2arc_header()
4940 (void) printf(" lb_asize_refcount: %llu\n", in dump_l2arc_header()
4942 (void) printf(" lb_count_refcount: %llu\n", in dump_l2arc_header()
4944 (void) printf(" trim_action_time: %llu\n", in dump_l2arc_header()
4946 (void) printf(" trim_state: %llu\n\n", in dump_l2arc_header()
4978 if ((dump_opt['l'] < 3) && (first_label(label->config) != l)) in dump_config_from_label()
4982 dump_nvlist(label->config_nv, 4); in dump_config_from_label()
4983 print_label_numbers(" labels = ", label->config); in dump_config_from_label()
4986 dump_nvlist_stats(label->config_nv, buflen); in dump_config_from_label()
5003 uberblock_t *ub = (void *)((char *)&label->label + uoff); in dump_label_uberblocks()
5004 cksum_record_t *rec = label->uberblocks[i]; in dump_label_uberblocks()
5009 (void) printf(" Uberblock[%d] invalid\n", i); in dump_label_uberblocks()
5018 (ub->ub_mmp_magic == MMP_MAGIC) && ub->ub_mmp_delay && in dump_label_uberblocks()
5019 (i >= VDEV_UBERBLOCK_COUNT(&vd) - MMP_BLOCKS_PER_LABEL)) in dump_label_uberblocks()
5024 " Uberblock[%d]\n", i); in dump_label_uberblocks()
5054 (void) fprintf(stderr, "failed to lookup %s: %s\n", in dump_path_impl()
5063 "failed to get SA dbuf for obj %llu: %s\n", in dump_path_impl()
5072 (void) fprintf(stderr, "invalid bonus type %d for obj %llu\n", in dump_path_impl()
5078 (void) printf("obj=%llu %s type=%d bonustype=%d\n", in dump_path_impl()
5099 (void) fprintf(stderr, "object %llu has non-file/directory " in dump_path_impl()
5100 "type %d\n", (u_longlong_t)obj, doi.doi_type); in dump_path_impl()
5123 (void) fprintf(stderr, "can't lookup root znode: %s\n", in dump_path()
5154 len -= nwritten; in dump_backup_bytes()
5185 "'%c'\n", *c); in dump_backup()
5192 "to a terminal\n"); in dump_backup()
5206 fprintf(stderr, "dump_backup: dmu_send_obj: %s\n", in dump_backup()
5220 (void) printf("Copying object %" PRIu64 " to file %s\n", srcobj, in zdb_copy_object()
5225 (void) printf("Failed to get handle for SA znode\n"); in zdb_copy_object()
5234 (void) printf("Object %" PRIu64 " is %" PRIu64 " bytes\n", srcobj, in zdb_copy_object()
5241 if (fd == -1) in zdb_copy_object()
5245 * allocation failures and nigh-infinite printing if the in zdb_copy_object()
5257 readsize = MIN(size - offset, 1 << 20); in zdb_copy_object()
5260 (void) printf("got error %u from dmu_read\n", err); in zdb_copy_object()
5267 " error=%d\n", offset, readsize, err); in zdb_copy_object()
5277 " %" PRIu64 " bytes, exiting...\n", in zdb_copy_object()
5304 eck = (zio_eck_t *)((char *)(data) + VDEV_PHYS_SIZE) - 1; in label_cksum_valid()
5309 byteswap = (eck->zec_magic == BSWAP_64(ZEC_MAGIC)); in label_cksum_valid()
5313 expected_cksum = eck->zec_cksum; in label_cksum_valid()
5314 eck->zec_cksum = verifier; in label_cksum_valid()
5317 ci->ci_func[byteswap](abd, VDEV_PHYS_SIZE, NULL, &actual_cksum); in label_cksum_valid()
5355 if (zfs_append_partition(path, MAXPATHLEN) == -1) in dump_label()
5361 "specifying absolute path instead\n", dev); in dump_label()
5367 (void) printf("cannot open '%s': %s\n", path, strerror(errno)); in dump_label()
5372 (void) printf("failed to stat '%s': %s\n", path, in dump_label()
5379 (void) printf("failed to invalidate cache '%s' : %s\n", path, in dump_label()
5399 char *buf = label->label.vl_vdev_phys.vp_nvlist; in dump_label()
5400 size_t buflen = sizeof (label->label.vl_vdev_phys.vp_nvlist); in dump_label()
5406 label->label_offset = vdev_label_offset(psize, l, 0); in dump_label()
5408 if (pread64(fd, &label->label, sizeof (label->label), in dump_label()
5409 label->label_offset) != sizeof (label->label)) { in dump_label()
5411 (void) printf("failed to read label %d\n", l); in dump_label()
5412 label->read_failed = B_TRUE; in dump_label()
5417 label->read_failed = B_FALSE; in dump_label()
5418 label->cksum_valid = label_cksum_valid(&label->label, in dump_label()
5419 label->label_offset); in dump_label()
5446 label->config = rec; in dump_label()
5447 label->config_nv = config; in dump_label()
5466 label->uberblocks[i] = rec; in dump_label()
5475 size_t buflen = sizeof (label->label.vl_vdev_phys.vp_nvlist); in dump_label()
5477 if (label->read_failed == B_TRUE) in dump_label()
5480 if (label->config_nv) { in dump_label()
5484 (void) printf("failed to unpack label %d\n", l); in dump_label()
5490 nvlist_free(label->config_nv); in dump_label()
5545 avl_first(&dmu_objset_ds(os)->ds_bookmarks); dbn != NULL; in dump_one_objset()
5546 dbn = AVL_NEXT(&dmu_objset_ds(os)->ds_bookmarks, dbn)) { in dump_one_objset()
5547 mos_obj_refd(dbn->dbn_phys.zbm_redaction_obj); in dump_one_objset()
5548 if (dbn->dbn_phys.zbm_redaction_obj != 0) { in dump_one_objset()
5551 objset_t *mos = os->os_spa->spa_meta_objset; in dump_one_objset() local
5553 VERIFY0(dnode_hold(mos, in dump_one_objset()
5554 dbn->dbn_phys.zbm_redaction_obj, FTAG, &rl)); in dump_one_objset()
5555 if (rl->dn_have_spill) { in dump_one_objset()
5560 if (dbn->dbn_phys.zbm_flags & ZBM_FLAG_HAS_FBN) in dump_one_objset()
5564 if (dsl_deadlist_is_open(&dmu_objset_ds(os)->ds_dir->dd_livelist) && in dump_one_objset()
5591 * Extended object types to report deferred frees and dedup auto-ditto blocks.
5651 uint64_t ms_shift = vd->vdev_ms_shift; in same_metaslab()
5673 * histograms showing by blocksize of 512 - 2^ SPA_MAX_FOR_16M
5680 * if the '-P' parameter is specified then the full raw number (parseable)
5709 parm_histo[0].count = zcb->zcb_psize_count; in dump_size_histograms()
5710 parm_histo[0].len = zcb->zcb_psize_len; in dump_size_histograms()
5714 parm_histo[1].count = zcb->zcb_lsize_count; in dump_size_histograms()
5715 parm_histo[1].len = zcb->zcb_lsize_len; in dump_size_histograms()
5719 parm_histo[2].count = zcb->zcb_asize_count; in dump_size_histograms()
5720 parm_histo[2].len = zcb->zcb_asize_len; in dump_size_histograms()
5724 (void) printf("\nBlock Size Histogram\n"); in dump_size_histograms()
5729 (void) printf("\n%s\t", blocksize_title1); in dump_size_histograms()
5731 (void) printf("\n%7s ", blocksize_title1); in dump_size_histograms()
5735 if (j < NUM_HISTO - 1) { in dump_size_histograms()
5742 if (j < NUM_HISTO - 1) { in dump_size_histograms()
5744 (void) printf("%-7s ", in dump_size_histograms()
5752 (void) printf("\n"); in dump_size_histograms()
5772 (void) printf("\n"); in dump_size_histograms()
5818 (void) printf("\n"); in dump_size_histograms()
5843 spa_config_enter(zcb->zcb_spa, SCL_CONFIG, FTAG, RW_READER); in zdb_count_block()
5862 ddt_t *ddt = ddt_select(zcb->zcb_spa, bp); in zdb_count_block()
5897 boolean_t seen = !!(((uintptr_t)dde->dde_io) & (1 << v)); in zdb_count_block()
5899 dde->dde_io = in zdb_count_block()
5900 (void *)(((uintptr_t)dde->dde_io) | (1 << v)); in zdb_count_block()
5903 if (ddt_phys_total_refcnt(ddt, dde->dde_phys) > 0) in zdb_count_block()
5904 ddt_phys_decref(dde->dde_phys, v); in zdb_count_block()
5913 * claimed it as-is, then we would miss the claim on some in zdb_count_block()
5925 ddt_phys_birth(dde->dde_phys, v)); in zdb_count_block()
5927 ddt_bp_fill(dde->dde_phys, v, &tempbp, in zdb_count_block()
5937 zcb->zcb_dedup_asize += BP_GET_ASIZE(bp); in zdb_count_block()
5938 zcb->zcb_dedup_blocks++; in zdb_count_block()
5945 } else if (zcb->zcb_brt_is_active && in zdb_count_block()
5946 brt_maybe_exists(zcb->zcb_spa, bp)) { in zdb_count_block()
5952 * To do this, we keep our own in-memory BRT. For each block in zdb_count_block()
5961 zbre_search.zbre_dva = bp->blk_dva[0]; in zdb_count_block()
5962 zbre = avl_find(&zcb->zcb_brt, &zbre_search, &where); in zdb_count_block()
5966 brt_entry_get_refcount(zcb->zcb_spa, bp); in zdb_count_block()
5970 zbre->zbre_dva = bp->blk_dva[0]; in zdb_count_block()
5971 zbre->zbre_refcount = refcnt; in zdb_count_block()
5972 avl_insert(&zcb->zcb_brt, zbre, where); in zdb_count_block()
5979 zcb->zcb_clone_asize += BP_GET_ASIZE(bp); in zdb_count_block()
5980 zcb->zcb_clone_blocks++; in zdb_count_block()
5982 zbre->zbre_refcount--; in zdb_count_block()
5983 if (zbre->zbre_refcount == 0) { in zdb_count_block()
5984 avl_remove(&zcb->zcb_brt, zbre); in zdb_count_block()
5998 zdb_blkstats_t *zb = &zcb->zcb_type[l][t]; in zdb_count_block()
6000 zb->zb_asize += BP_GET_ASIZE(bp); in zdb_count_block()
6001 zb->zb_lsize += BP_GET_LSIZE(bp); in zdb_count_block()
6002 zb->zb_psize += BP_GET_PSIZE(bp); in zdb_count_block()
6003 zb->zb_count++; in zdb_count_block()
6012 zb->zb_psize_histogram[idx]++; in zdb_count_block()
6014 zb->zb_gangs += BP_COUNT_GANG(bp); in zdb_count_block()
6018 if (DVA_GET_VDEV(&bp->blk_dva[0]) == in zdb_count_block()
6019 DVA_GET_VDEV(&bp->blk_dva[1])) { in zdb_count_block()
6020 zb->zb_ditto_samevdev++; in zdb_count_block()
6022 if (same_metaslab(zcb->zcb_spa, in zdb_count_block()
6023 DVA_GET_VDEV(&bp->blk_dva[0]), in zdb_count_block()
6024 DVA_GET_OFFSET(&bp->blk_dva[0]), in zdb_count_block()
6025 DVA_GET_OFFSET(&bp->blk_dva[1]))) in zdb_count_block()
6026 zb->zb_ditto_same_ms++; in zdb_count_block()
6030 equal = (DVA_GET_VDEV(&bp->blk_dva[0]) == in zdb_count_block()
6031 DVA_GET_VDEV(&bp->blk_dva[1])) + in zdb_count_block()
6032 (DVA_GET_VDEV(&bp->blk_dva[0]) == in zdb_count_block()
6033 DVA_GET_VDEV(&bp->blk_dva[2])) + in zdb_count_block()
6034 (DVA_GET_VDEV(&bp->blk_dva[1]) == in zdb_count_block()
6035 DVA_GET_VDEV(&bp->blk_dva[2])); in zdb_count_block()
6037 zb->zb_ditto_samevdev++; in zdb_count_block()
6039 if (DVA_GET_VDEV(&bp->blk_dva[0]) == in zdb_count_block()
6040 DVA_GET_VDEV(&bp->blk_dva[1]) && in zdb_count_block()
6041 same_metaslab(zcb->zcb_spa, in zdb_count_block()
6042 DVA_GET_VDEV(&bp->blk_dva[0]), in zdb_count_block()
6043 DVA_GET_OFFSET(&bp->blk_dva[0]), in zdb_count_block()
6044 DVA_GET_OFFSET(&bp->blk_dva[1]))) in zdb_count_block()
6045 zb->zb_ditto_same_ms++; in zdb_count_block()
6046 else if (DVA_GET_VDEV(&bp->blk_dva[0]) == in zdb_count_block()
6047 DVA_GET_VDEV(&bp->blk_dva[2]) && in zdb_count_block()
6048 same_metaslab(zcb->zcb_spa, in zdb_count_block()
6049 DVA_GET_VDEV(&bp->blk_dva[0]), in zdb_count_block()
6050 DVA_GET_OFFSET(&bp->blk_dva[0]), in zdb_count_block()
6051 DVA_GET_OFFSET(&bp->blk_dva[2]))) in zdb_count_block()
6052 zb->zb_ditto_same_ms++; in zdb_count_block()
6053 else if (DVA_GET_VDEV(&bp->blk_dva[1]) == in zdb_count_block()
6054 DVA_GET_VDEV(&bp->blk_dva[2]) && in zdb_count_block()
6055 same_metaslab(zcb->zcb_spa, in zdb_count_block()
6056 DVA_GET_VDEV(&bp->blk_dva[1]), in zdb_count_block()
6057 DVA_GET_OFFSET(&bp->blk_dva[1]), in zdb_count_block()
6058 DVA_GET_OFFSET(&bp->blk_dva[2]))) in zdb_count_block()
6059 zb->zb_ditto_same_ms++; in zdb_count_block()
6065 spa_config_exit(zcb->zcb_spa, SCL_CONFIG, FTAG); in zdb_count_block()
6068 zcb->zcb_embedded_blocks[BPE_GET_ETYPE(bp)]++; in zdb_count_block()
6069 zcb->zcb_embedded_histogram[BPE_GET_ETYPE(bp)] in zdb_count_block()
6078 int bin = highbit64(BP_GET_PSIZE(bp)) - 1; in zdb_count_block()
6080 zcb->zcb_psize_count[bin]++; in zdb_count_block()
6081 zcb->zcb_psize_len[bin] += BP_GET_PSIZE(bp); in zdb_count_block()
6082 zcb->zcb_psize_total += BP_GET_PSIZE(bp); in zdb_count_block()
6084 bin = highbit64(BP_GET_LSIZE(bp)) - 1; in zdb_count_block()
6086 zcb->zcb_lsize_count[bin]++; in zdb_count_block()
6087 zcb->zcb_lsize_len[bin] += BP_GET_LSIZE(bp); in zdb_count_block()
6088 zcb->zcb_lsize_total += BP_GET_LSIZE(bp); in zdb_count_block()
6090 bin = highbit64(BP_GET_ASIZE(bp)) - 1; in zdb_count_block()
6092 zcb->zcb_asize_count[bin]++; in zdb_count_block()
6093 zcb->zcb_asize_len[bin] += BP_GET_ASIZE(bp); in zdb_count_block()
6094 zcb->zcb_asize_total += BP_GET_ASIZE(bp); in zdb_count_block()
6099 VERIFY0(zio_wait(zio_claim(NULL, zcb->zcb_spa, in zdb_count_block()
6100 spa_min_claim_txg(zcb->zcb_spa), bp, NULL, NULL, in zdb_count_block()
6107 spa_t *spa = zio->io_spa; in zdb_blkptr_done()
6108 blkptr_t *bp = zio->io_bp; in zdb_blkptr_done()
6109 int ioerr = zio->io_error; in zdb_blkptr_done()
6110 zdb_cb_t *zcb = zio->io_private; in zdb_blkptr_done()
6111 zbookmark_phys_t *zb = &zio->io_bookmark; in zdb_blkptr_done()
6113 mutex_enter(&spa->spa_scrub_lock); in zdb_blkptr_done()
6114 spa->spa_load_verify_bytes -= BP_GET_PSIZE(bp); in zdb_blkptr_done()
6115 cv_broadcast(&spa->spa_scrub_io_cv); in zdb_blkptr_done()
6117 if (ioerr && !(zio->io_flags & ZIO_FLAG_SPECULATIVE)) { in zdb_blkptr_done()
6120 zcb->zcb_haderrors = 1; in zdb_blkptr_done()
6121 zcb->zcb_errors[ioerr]++; in zdb_blkptr_done()
6130 "<%llu, %llu, %lld, %llx> %s -- skipping\n", in zdb_blkptr_done()
6132 (u_longlong_t)zb->zb_objset, in zdb_blkptr_done()
6133 (u_longlong_t)zb->zb_object, in zdb_blkptr_done()
6134 (u_longlong_t)zb->zb_level, in zdb_blkptr_done()
6135 (u_longlong_t)zb->zb_blkid, in zdb_blkptr_done()
6138 mutex_exit(&spa->spa_scrub_lock); in zdb_blkptr_done()
6140 abd_free(zio->io_abd); in zdb_blkptr_done()
6151 if (zb->zb_level == ZB_DNODE_LEVEL) in zdb_blkptr_cb()
6158 "level %lld offset 0x%llx %s\n", in zdb_blkptr_cb()
6159 (u_longlong_t)zb->zb_objset, in zdb_blkptr_cb()
6160 (u_longlong_t)zb->zb_object, in zdb_blkptr_cb()
6161 (longlong_t)zb->zb_level, in zdb_blkptr_cb()
6183 if (zb->zb_level == ZB_ZIL_LEVEL) in zdb_blkptr_cb()
6186 mutex_enter(&spa->spa_scrub_lock); in zdb_blkptr_cb()
6187 while (spa->spa_load_verify_bytes > max_inflight_bytes) in zdb_blkptr_cb()
6188 cv_wait(&spa->spa_scrub_io_cv, &spa->spa_scrub_lock); in zdb_blkptr_cb()
6189 spa->spa_load_verify_bytes += size; in zdb_blkptr_cb()
6190 mutex_exit(&spa->spa_scrub_lock); in zdb_blkptr_cb()
6196 zcb->zcb_readfails = 0; in zdb_blkptr_cb()
6205 if (dump_opt['b'] < 5 && gethrtime() > zcb->zcb_lastprint + NANOSEC) { in zdb_blkptr_cb()
6208 uint64_t bytes = zcb->zcb_type[ZB_TOTAL][ZDB_OT_TOTAL].zb_asize; in zdb_blkptr_cb()
6210 1 + bytes / (1 + ((now - zcb->zcb_start) / 1000 / 1000)); in zdb_blkptr_cb()
6212 (zcb->zcb_totalasize - bytes) / 1024 / kb_per_sec; in zdb_blkptr_cb()
6227 zcb->zcb_lastprint = now; in zdb_blkptr_cb()
6238 (void) printf("leaked space: vdev %llu, offset 0x%llx, size %llu\n", in zdb_leak()
6239 (u_longlong_t)vd->vdev_id, (u_longlong_t)start, (u_longlong_t)size); in zdb_leak()
6252 uint64_t offset = sme->sme_offset; in load_unflushed_svr_segs_cb()
6253 uint64_t size = sme->sme_run; in load_unflushed_svr_segs_cb()
6256 if (sme->sme_vdev != svr->svr_vdev_id) in load_unflushed_svr_segs_cb()
6259 vdev_t *vd = vdev_lookup_top(spa, sme->sme_vdev); in load_unflushed_svr_segs_cb()
6260 metaslab_t *ms = vd->vdev_ms[offset >> vd->vdev_ms_shift]; in load_unflushed_svr_segs_cb()
6261 ASSERT(sme->sme_type == SM_ALLOC || sme->sme_type == SM_FREE); in load_unflushed_svr_segs_cb()
6266 if (sme->sme_type == SM_ALLOC) in load_unflushed_svr_segs_cb()
6267 zfs_range_tree_add(svr->svr_allocd_segs, offset, size); in load_unflushed_svr_segs_cb()
6269 zfs_range_tree_remove(svr->svr_allocd_segs, offset, size); in load_unflushed_svr_segs_cb()
6289 spa_min_claim_txg(vd->vdev_spa))); in claim_segment_impl_cb()
6314 if (spa->spa_vdev_removal == NULL) in zdb_claim_removing()
6319 spa_vdev_removal_t *svr = spa->spa_vdev_removal; in zdb_claim_removing()
6320 vdev_t *vd = vdev_lookup_top(spa, svr->svr_vdev_id); in zdb_claim_removing()
6321 vdev_indirect_mapping_t *vim = vd->vdev_indirect_mapping; in zdb_claim_removing()
6323 ASSERT0(zfs_range_tree_space(svr->svr_allocd_segs)); in zdb_claim_removing()
6327 for (uint64_t msi = 0; msi < vd->vdev_ms_count; msi++) { in zdb_claim_removing()
6328 metaslab_t *msp = vd->vdev_ms[msi]; in zdb_claim_removing()
6331 if (msp->ms_sm != NULL) in zdb_claim_removing()
6332 VERIFY0(space_map_load(msp->ms_sm, allocs, SM_ALLOC)); in zdb_claim_removing()
6334 svr->svr_allocd_segs); in zdb_claim_removing()
6345 zfs_range_tree_clear(svr->svr_allocd_segs, in zdb_claim_removing()
6347 vd->vdev_asize - vdev_indirect_mapping_max_offset(vim)); in zdb_claim_removing()
6349 zcb->zcb_removing_size += zfs_range_tree_space(svr->svr_allocd_segs); in zdb_claim_removing()
6350 zfs_range_tree_vacate(svr->svr_allocd_segs, claim_segment_cb, vd); in zdb_claim_removing()
6361 spa_t *spa = zcb->zcb_spa; in increment_indirect_mapping_cb()
6363 const dva_t *dva = &bp->blk_dva[0]; in increment_indirect_mapping_cb()
6370 vd = vdev_lookup_top(zcb->zcb_spa, DVA_GET_VDEV(dva)); in increment_indirect_mapping_cb()
6374 ASSERT(vd->vdev_indirect_config.vic_mapping_object != 0); in increment_indirect_mapping_cb()
6375 ASSERT3P(zcb->zcb_vd_obsolete_counts[vd->vdev_id], !=, NULL); in increment_indirect_mapping_cb()
6378 vd->vdev_indirect_mapping, in increment_indirect_mapping_cb()
6380 zcb->zcb_vd_obsolete_counts[vd->vdev_id]); in increment_indirect_mapping_cb()
6388 vdev_indirect_mapping_t *vim = vd->vdev_indirect_mapping; in zdb_load_obsolete_counts()
6389 spa_t *spa = vd->vdev_spa; in zdb_load_obsolete_counts()
6391 &spa->spa_condensing_indirect_phys; in zdb_load_obsolete_counts()
6396 EQUIV(obsolete_sm_object != 0, vd->vdev_obsolete_sm != NULL); in zdb_load_obsolete_counts()
6398 if (vd->vdev_obsolete_sm != NULL) { in zdb_load_obsolete_counts()
6400 vd->vdev_obsolete_sm); in zdb_load_obsolete_counts()
6402 if (scip->scip_vdev == vd->vdev_id && in zdb_load_obsolete_counts()
6403 scip->scip_prev_obsolete_sm_object != 0) { in zdb_load_obsolete_counts()
6405 VERIFY0(space_map_open(&prev_obsolete_sm, spa->spa_meta_objset, in zdb_load_obsolete_counts()
6406 scip->scip_prev_obsolete_sm_object, 0, vd->vdev_asize, 0)); in zdb_load_obsolete_counts()
6423 vdev_t *vd = cseea->cseea_vd; in checkpoint_sm_exclude_entry_cb()
6424 metaslab_t *ms = vd->vdev_ms[sme->sme_offset >> vd->vdev_ms_shift]; in checkpoint_sm_exclude_entry_cb()
6425 uint64_t end = sme->sme_offset + sme->sme_run; in checkpoint_sm_exclude_entry_cb()
6427 ASSERT(sme->sme_type == SM_FREE); in checkpoint_sm_exclude_entry_cb()
6443 * that handles metaslab-crossing segments in the future. in checkpoint_sm_exclude_entry_cb()
6445 VERIFY3U(sme->sme_offset, >=, ms->ms_start); in checkpoint_sm_exclude_entry_cb()
6446 VERIFY3U(end, <=, ms->ms_start + ms->ms_size); in checkpoint_sm_exclude_entry_cb()
6452 mutex_enter(&ms->ms_lock); in checkpoint_sm_exclude_entry_cb()
6453 zfs_range_tree_remove(ms->ms_allocatable, sme->sme_offset, in checkpoint_sm_exclude_entry_cb()
6454 sme->sme_run); in checkpoint_sm_exclude_entry_cb()
6455 mutex_exit(&ms->ms_lock); in checkpoint_sm_exclude_entry_cb()
6457 cseea->cseea_checkpoint_size += sme->sme_run; in checkpoint_sm_exclude_entry_cb()
6464 spa_t *spa = vd->vdev_spa; in zdb_leak_init_vdev_exclude_checkpoint()
6472 if (vd->vdev_top_zap == 0) in zdb_leak_init_vdev_exclude_checkpoint()
6487 if (zap_contains(spa_meta_objset(spa), vd->vdev_top_zap, in zdb_leak_init_vdev_exclude_checkpoint()
6491 VERIFY0(zap_lookup(spa_meta_objset(spa), vd->vdev_top_zap, in zdb_leak_init_vdev_exclude_checkpoint()
6500 checkpoint_sm_obj, 0, vd->vdev_asize, vd->vdev_ashift)); in zdb_leak_init_vdev_exclude_checkpoint()
6507 zcb->zcb_checkpoint_size += cseea.cseea_checkpoint_size; in zdb_leak_init_vdev_exclude_checkpoint()
6515 vdev_t *rvd = spa->spa_root_vdev; in zdb_leak_init_exclude_checkpoint()
6516 for (uint64_t c = 0; c < rvd->vdev_children; c++) { in zdb_leak_init_exclude_checkpoint()
6517 ASSERT3U(c, ==, rvd->vdev_child[c]->vdev_id); in zdb_leak_init_exclude_checkpoint()
6518 zdb_leak_init_vdev_exclude_checkpoint(rvd->vdev_child[c], zcb); in zdb_leak_init_exclude_checkpoint()
6528 uint64_t offset = sme->sme_offset; in count_unflushed_space_cb()
6529 uint64_t vdev_id = sme->sme_vdev; in count_unflushed_space_cb()
6535 metaslab_t *ms = vd->vdev_ms[offset >> vd->vdev_ms_shift]; in count_unflushed_space_cb()
6536 ASSERT(sme->sme_type == SM_ALLOC || sme->sme_type == SM_FREE); in count_unflushed_space_cb()
6541 if (sme->sme_type == SM_ALLOC) in count_unflushed_space_cb()
6542 *ualloc_space += sme->sme_run; in count_unflushed_space_cb()
6544 *ualloc_space -= sme->sme_run; in count_unflushed_space_cb()
6566 uint64_t offset = sme->sme_offset; in load_unflushed_cb()
6567 uint64_t size = sme->sme_run; in load_unflushed_cb()
6568 uint64_t vdev_id = sme->sme_vdev; in load_unflushed_cb()
6576 metaslab_t *ms = vd->vdev_ms[offset >> vd->vdev_ms_shift]; in load_unflushed_cb()
6578 ASSERT(sme->sme_type == SM_ALLOC || sme->sme_type == SM_FREE); in load_unflushed_cb()
6584 if (*uic_maptype == sme->sme_type) in load_unflushed_cb()
6585 zfs_range_tree_add(ms->ms_allocatable, offset, size); in load_unflushed_cb()
6587 zfs_range_tree_remove(ms->ms_allocatable, offset, size); in load_unflushed_cb()
6601 vdev_t *rvd = spa->spa_root_vdev; in load_concrete_ms_allocatable_trees()
6602 for (uint64_t i = 0; i < rvd->vdev_children; i++) { in load_concrete_ms_allocatable_trees()
6603 vdev_t *vd = rvd->vdev_child[i]; in load_concrete_ms_allocatable_trees()
6605 ASSERT3U(i, ==, vd->vdev_id); in load_concrete_ms_allocatable_trees()
6607 if (vd->vdev_ops == &vdev_indirect_ops) in load_concrete_ms_allocatable_trees()
6610 for (uint64_t m = 0; m < vd->vdev_ms_count; m++) { in load_concrete_ms_allocatable_trees()
6611 metaslab_t *msp = vd->vdev_ms[m]; in load_concrete_ms_allocatable_trees()
6616 (longlong_t)vd->vdev_id, in load_concrete_ms_allocatable_trees()
6617 (longlong_t)msp->ms_id, in load_concrete_ms_allocatable_trees()
6618 (longlong_t)vd->vdev_ms_count); in load_concrete_ms_allocatable_trees()
6620 mutex_enter(&msp->ms_lock); in load_concrete_ms_allocatable_trees()
6621 zfs_range_tree_vacate(msp->ms_allocatable, NULL, NULL); in load_concrete_ms_allocatable_trees()
6625 * size-ordered tree, so clear the range_tree ops. in load_concrete_ms_allocatable_trees()
6627 msp->ms_allocatable->rt_ops = NULL; in load_concrete_ms_allocatable_trees()
6629 if (msp->ms_sm != NULL) { in load_concrete_ms_allocatable_trees()
6630 VERIFY0(space_map_load(msp->ms_sm, in load_concrete_ms_allocatable_trees()
6631 msp->ms_allocatable, maptype)); in load_concrete_ms_allocatable_trees()
6633 if (!msp->ms_loaded) in load_concrete_ms_allocatable_trees()
6634 msp->ms_loaded = B_TRUE; in load_concrete_ms_allocatable_trees()
6635 mutex_exit(&msp->ms_lock); in load_concrete_ms_allocatable_trees()
6643 * vm_idxp is an in-out parameter which (for indirect vdevs) is the
6651 vdev_indirect_mapping_t *vim = vd->vdev_indirect_mapping; in load_indirect_ms_allocatable_tree()
6653 mutex_enter(&msp->ms_lock); in load_indirect_ms_allocatable_tree()
6654 zfs_range_tree_vacate(msp->ms_allocatable, NULL, NULL); in load_indirect_ms_allocatable_tree()
6658 * size-ordered tree, so clear the range_tree ops. in load_indirect_ms_allocatable_tree()
6660 msp->ms_allocatable->rt_ops = NULL; in load_indirect_ms_allocatable_tree()
6665 &vim->vim_entries[*vim_idxp]; in load_indirect_ms_allocatable_tree()
6667 uint64_t ent_len = DVA_GET_ASIZE(&vimep->vimep_dst); in load_indirect_ms_allocatable_tree()
6668 ASSERT3U(ent_offset, >=, msp->ms_start); in load_indirect_ms_allocatable_tree()
6669 if (ent_offset >= msp->ms_start + msp->ms_size) in load_indirect_ms_allocatable_tree()
6677 msp->ms_start + msp->ms_size); in load_indirect_ms_allocatable_tree()
6678 zfs_range_tree_add(msp->ms_allocatable, ent_offset, ent_len); in load_indirect_ms_allocatable_tree()
6681 if (!msp->ms_loaded) in load_indirect_ms_allocatable_tree()
6682 msp->ms_loaded = B_TRUE; in load_indirect_ms_allocatable_tree()
6683 mutex_exit(&msp->ms_lock); in load_indirect_ms_allocatable_tree()
6691 vdev_t *rvd = spa->spa_root_vdev; in zdb_leak_init_prepare_indirect_vdevs()
6692 for (uint64_t c = 0; c < rvd->vdev_children; c++) { in zdb_leak_init_prepare_indirect_vdevs()
6693 vdev_t *vd = rvd->vdev_child[c]; in zdb_leak_init_prepare_indirect_vdevs()
6695 ASSERT3U(c, ==, vd->vdev_id); in zdb_leak_init_prepare_indirect_vdevs()
6697 if (vd->vdev_ops != &vdev_indirect_ops) in zdb_leak_init_prepare_indirect_vdevs()
6705 zcb->zcb_vd_obsolete_counts[c] = zdb_load_obsolete_counts(vd); in zdb_leak_init_prepare_indirect_vdevs()
6716 vd->vdev_indirect_mapping; in zdb_leak_init_prepare_indirect_vdevs()
6718 for (uint64_t m = 0; m < vd->vdev_ms_count; m++) { in zdb_leak_init_prepare_indirect_vdevs()
6723 (longlong_t)vd->vdev_id, in zdb_leak_init_prepare_indirect_vdevs()
6724 (longlong_t)vd->vdev_ms[m]->ms_id, in zdb_leak_init_prepare_indirect_vdevs()
6725 (longlong_t)vd->vdev_ms_count); in zdb_leak_init_prepare_indirect_vdevs()
6727 load_indirect_ms_allocatable_tree(vd, vd->vdev_ms[m], in zdb_leak_init_prepare_indirect_vdevs()
6737 zcb->zcb_spa = spa; in zdb_leak_init()
6742 dsl_pool_t *dp = spa->spa_dsl_pool; in zdb_leak_init()
6743 vdev_t *rvd = spa->spa_root_vdev; in zdb_leak_init()
6750 spa->spa_normal_class->mc_ops = &zdb_metaslab_ops; in zdb_leak_init()
6751 spa->spa_log_class->mc_ops = &zdb_metaslab_ops; in zdb_leak_init()
6752 spa->spa_embedded_log_class->mc_ops = &zdb_metaslab_ops; in zdb_leak_init()
6754 zcb->zcb_vd_obsolete_counts = in zdb_leak_init()
6755 umem_zalloc(rvd->vdev_children * sizeof (uint32_t *), in zdb_leak_init()
6774 * order to avoid false-positives during leak-detection, we in zdb_leak_init()
6787 ASSERT3U(zcb->zcb_checkpoint_size, ==, spa_get_checkpoint_space(spa)); in zdb_leak_init()
6790 (void) fprintf(stderr, "\n"); in zdb_leak_init()
6792 if (bpobj_is_open(&dp->dp_obsolete_bpobj)) { in zdb_leak_init()
6795 (void) bpobj_iterate_nofree(&dp->dp_obsolete_bpobj, in zdb_leak_init()
6804 vdev_indirect_mapping_t *vim = vd->vdev_indirect_mapping; in zdb_check_for_obsolete_leaks()
6812 &vim->vim_entries[i]; in zdb_check_for_obsolete_leaks()
6815 metaslab_t *msp = vd->vdev_ms[offset >> vd->vdev_ms_shift]; in zdb_check_for_obsolete_leaks()
6822 inner_offset < DVA_GET_ASIZE(&vimep->vimep_dst); in zdb_check_for_obsolete_leaks()
6823 inner_offset += 1ULL << vd->vdev_ashift) { in zdb_check_for_obsolete_leaks()
6824 if (zfs_range_tree_contains(msp->ms_allocatable, in zdb_check_for_obsolete_leaks()
6825 offset + inner_offset, 1ULL << vd->vdev_ashift)) { in zdb_check_for_obsolete_leaks()
6826 obsolete_bytes += 1ULL << vd->vdev_ashift; in zdb_check_for_obsolete_leaks()
6830 int64_t bytes_leaked = obsolete_bytes - in zdb_check_for_obsolete_leaks()
6831 zcb->zcb_vd_obsolete_counts[vd->vdev_id][i]; in zdb_check_for_obsolete_leaks()
6832 ASSERT3U(DVA_GET_ASIZE(&vimep->vimep_dst), >=, in zdb_check_for_obsolete_leaks()
6833 zcb->zcb_vd_obsolete_counts[vd->vdev_id][i]); in zdb_check_for_obsolete_leaks()
6838 "mismatch on %llu:%llx:%llx : %llx bytes leaked\n", in zdb_check_for_obsolete_leaks()
6839 (u_longlong_t)vd->vdev_id, in zdb_check_for_obsolete_leaks()
6841 (u_longlong_t)DVA_GET_ASIZE(&vimep->vimep_dst), in zdb_check_for_obsolete_leaks()
6854 "unreferenced\n", in zdb_check_for_obsolete_leaks()
6855 (u_longlong_t)vd->vdev_id, pct_leaked, in zdb_check_for_obsolete_leaks()
6859 "for vdev %llu -- %llx total bytes mismatched\n", in zdb_check_for_obsolete_leaks()
6860 (u_longlong_t)vd->vdev_id, in zdb_check_for_obsolete_leaks()
6866 zcb->zcb_vd_obsolete_counts[vd->vdev_id]); in zdb_check_for_obsolete_leaks()
6867 zcb->zcb_vd_obsolete_counts[vd->vdev_id] = NULL; in zdb_check_for_obsolete_leaks()
6879 vdev_t *rvd = spa->spa_root_vdev; in zdb_leak_fini()
6880 for (unsigned c = 0; c < rvd->vdev_children; c++) { in zdb_leak_fini()
6881 vdev_t *vd = rvd->vdev_child[c]; in zdb_leak_fini()
6883 if (zcb->zcb_vd_obsolete_counts[c] != NULL) { in zdb_leak_fini()
6887 for (uint64_t m = 0; m < vd->vdev_ms_count; m++) { in zdb_leak_fini()
6888 metaslab_t *msp = vd->vdev_ms[m]; in zdb_leak_fini()
6889 ASSERT3P(msp->ms_group, ==, (msp->ms_group->mg_class == in zdb_leak_fini()
6891 vd->vdev_log_mg : vd->vdev_mg); in zdb_leak_fini()
6906 if (vd->vdev_ops == &vdev_indirect_ops) { in zdb_leak_fini()
6907 zfs_range_tree_vacate(msp->ms_allocatable, in zdb_leak_fini()
6910 zfs_range_tree_vacate(msp->ms_allocatable, in zdb_leak_fini()
6913 if (msp->ms_loaded) { in zdb_leak_fini()
6914 msp->ms_loaded = B_FALSE; in zdb_leak_fini()
6919 umem_free(zcb->zcb_vd_obsolete_counts, in zdb_leak_fini()
6920 rvd->vdev_children * sizeof (uint32_t *)); in zdb_leak_fini()
6921 zcb->zcb_vd_obsolete_counts = NULL; in zdb_leak_fini()
6935 (void) printf("[%s] %s\n", in count_block_cb()
6944 * are still present in the MOS, waiting to be freed
6949 objset_t *mos = spa->spa_meta_objset; in iterate_deleted_livelists() local
6951 int err = zap_lookup(mos, DMU_POOL_DIRECTORY_OBJECT, in iterate_deleted_livelists()
6962 for (zap_cursor_init(&zc, mos, zap_obj); in iterate_deleted_livelists()
6965 VERIFY0(dsl_deadlist_open(&ll, mos, attrp->za_first_integer)); in iterate_deleted_livelists()
6988 VERIFY0(dsl_process_sub_livelist(&dle->dle_bpobj, &blks, NULL, NULL)); in livelist_entry_count_blocks_cb()
7028 objset_t *mos = spa->spa_meta_objset; in deleted_livelists_dump_mos() local
7029 int err = zap_lookup(mos, DMU_POOL_DIRECTORY_OBJECT, in deleted_livelists_dump_mos()
7040 const dva_t *dva1 = &((const zdb_brt_entry_t *)zcn1)->zbre_dva; in zdb_brt_entry_compare()
7041 const dva_t *dva2 = &((const zdb_brt_entry_t *)zcn2)->zbre_dva; in zdb_brt_entry_compare()
7068 avl_create(&zcb->zcb_brt, zdb_brt_entry_compare, in dump_block_stats()
7071 zcb->zcb_brt_is_active = B_TRUE; in dump_block_stats()
7074 (void) printf("\nTraversing all blocks %s%s%s%s%s...\n\n", in dump_block_stats()
7089 * When leak detection is disabled (-L option) we still traverse the in dump_block_stats()
7096 * If there's a deferred-free bplist, process that first. in dump_block_stats()
7098 (void) bpobj_iterate_nofree(&spa->spa_deferred_bpobj, in dump_block_stats()
7102 (void) bpobj_iterate_nofree(&spa->spa_dsl_pool->dp_free_bpobj, in dump_block_stats()
7109 VERIFY3U(0, ==, bptree_iterate(spa->spa_meta_objset, in dump_block_stats()
7110 spa->spa_dsl_pool->dp_bptree_obj, B_FALSE, count_block_cb, in dump_block_stats()
7119 zcb->zcb_totalasize = metaslab_class_get_alloc(spa_normal_class(spa)); in dump_block_stats()
7120 zcb->zcb_totalasize += metaslab_class_get_alloc(spa_special_class(spa)); in dump_block_stats()
7121 zcb->zcb_totalasize += metaslab_class_get_alloc(spa_dedup_class(spa)); in dump_block_stats()
7122 zcb->zcb_totalasize += in dump_block_stats()
7124 zcb->zcb_start = zcb->zcb_lastprint = gethrtime(); in dump_block_stats()
7134 (void) zio_wait(spa->spa_async_zio_root[c]); in dump_block_stats()
7135 spa->spa_async_zio_root[c] = zio_root(spa, NULL, NULL, in dump_block_stats()
7140 ASSERT0(spa->spa_load_verify_bytes); in dump_block_stats()
7146 zcb->zcb_haderrors |= err; in dump_block_stats()
7148 if (zcb->zcb_haderrors) { in dump_block_stats()
7149 (void) printf("\nError counts:\n\n"); in dump_block_stats()
7150 (void) printf("\t%5s %s\n", "errno", "count"); in dump_block_stats()
7152 if (zcb->zcb_errors[e] != 0) { in dump_block_stats()
7153 (void) printf("\t%5d %llu\n", in dump_block_stats()
7154 e, (u_longlong_t)zcb->zcb_errors[e]); in dump_block_stats()
7164 tzb = &zcb->zcb_type[ZB_TOTAL][ZDB_OT_TOTAL]; in dump_block_stats()
7176 tzb->zb_asize - zcb->zcb_dedup_asize - zcb->zcb_clone_asize + in dump_block_stats()
7177 zcb->zcb_removing_size + zcb->zcb_checkpoint_size; in dump_block_stats()
7180 (void) printf("\n\tNo leaks (block sum matches space" in dump_block_stats()
7181 " maps exactly)\n"); in dump_block_stats()
7184 "(%s %lld)\n", in dump_block_stats()
7188 (longlong_t)(total_alloc - total_found)); in dump_block_stats()
7191 if (tzb->zb_count == 0) { in dump_block_stats()
7196 (void) printf("\n"); in dump_block_stats()
7197 (void) printf("\t%-16s %14llu\n", "bp count:", in dump_block_stats()
7198 (u_longlong_t)tzb->zb_count); in dump_block_stats()
7199 (void) printf("\t%-16s %14llu\n", "ganged count:", in dump_block_stats()
7200 (longlong_t)tzb->zb_gangs); in dump_block_stats()
7201 (void) printf("\t%-16s %14llu avg: %6llu\n", "bp logical:", in dump_block_stats()
7202 (u_longlong_t)tzb->zb_lsize, in dump_block_stats()
7203 (u_longlong_t)(tzb->zb_lsize / tzb->zb_count)); in dump_block_stats()
7204 (void) printf("\t%-16s %14llu avg: %6llu compression: %6.2f\n", in dump_block_stats()
7205 "bp physical:", (u_longlong_t)tzb->zb_psize, in dump_block_stats()
7206 (u_longlong_t)(tzb->zb_psize / tzb->zb_count), in dump_block_stats()
7207 (double)tzb->zb_lsize / tzb->zb_psize); in dump_block_stats()
7208 (void) printf("\t%-16s %14llu avg: %6llu compression: %6.2f\n", in dump_block_stats()
7209 "bp allocated:", (u_longlong_t)tzb->zb_asize, in dump_block_stats()
7210 (u_longlong_t)(tzb->zb_asize / tzb->zb_count), in dump_block_stats()
7211 (double)tzb->zb_lsize / tzb->zb_asize); in dump_block_stats()
7212 (void) printf("\t%-16s %14llu ref>1: %6llu deduplication: %6.2f\n", in dump_block_stats()
7213 "bp deduped:", (u_longlong_t)zcb->zcb_dedup_asize, in dump_block_stats()
7214 (u_longlong_t)zcb->zcb_dedup_blocks, in dump_block_stats()
7215 (double)zcb->zcb_dedup_asize / tzb->zb_asize + 1.0); in dump_block_stats()
7216 (void) printf("\t%-16s %14llu count: %6llu\n", in dump_block_stats()
7217 "bp cloned:", (u_longlong_t)zcb->zcb_clone_asize, in dump_block_stats()
7218 (u_longlong_t)zcb->zcb_clone_blocks); in dump_block_stats()
7219 (void) printf("\t%-16s %14llu used: %5.2f%%\n", "Normal class:", in dump_block_stats()
7222 if (spa_special_class(spa)->mc_allocator[0].mca_rotor != NULL) { in dump_block_stats()
7228 (void) printf("\t%-16s %14llu used: %5.2f%%\n", in dump_block_stats()
7233 if (spa_dedup_class(spa)->mc_allocator[0].mca_rotor != NULL) { in dump_block_stats()
7239 (void) printf("\t%-16s %14llu used: %5.2f%%\n", in dump_block_stats()
7244 if (spa_embedded_log_class(spa)->mc_allocator[0].mca_rotor != NULL) { in dump_block_stats()
7250 (void) printf("\t%-16s %14llu used: %5.2f%%\n", in dump_block_stats()
7256 if (zcb->zcb_embedded_blocks[i] == 0) in dump_block_stats()
7258 (void) printf("\n"); in dump_block_stats()
7259 (void) printf("\tadditional, non-pointer bps of type %u: " in dump_block_stats()
7260 "%10llu\n", in dump_block_stats()
7261 i, (u_longlong_t)zcb->zcb_embedded_blocks[i]); in dump_block_stats()
7265 "number of bps\n"); in dump_block_stats()
7266 dump_histogram(zcb->zcb_embedded_histogram[i], in dump_block_stats()
7267 sizeof (zcb->zcb_embedded_histogram[i]) / in dump_block_stats()
7268 sizeof (zcb->zcb_embedded_histogram[i][0]), 0); in dump_block_stats()
7272 if (tzb->zb_ditto_samevdev != 0) { in dump_block_stats()
7273 (void) printf("\tDittoed blocks on same vdev: %llu\n", in dump_block_stats()
7274 (longlong_t)tzb->zb_ditto_samevdev); in dump_block_stats()
7276 if (tzb->zb_ditto_same_ms != 0) { in dump_block_stats()
7277 (void) printf("\tDittoed blocks in same metaslab: %llu\n", in dump_block_stats()
7278 (longlong_t)tzb->zb_ditto_same_ms); in dump_block_stats()
7281 for (uint64_t v = 0; v < spa->spa_root_vdev->vdev_children; v++) { in dump_block_stats()
7282 vdev_t *vd = spa->spa_root_vdev->vdev_child[v]; in dump_block_stats()
7283 vdev_indirect_mapping_t *vim = vd->vdev_indirect_mapping; in dump_block_stats()
7294 "(%s in memory)\n", in dump_block_stats()
7295 (longlong_t)vd->vdev_id, in dump_block_stats()
7304 "\t avg\t comp\t%%Total\tType\n"); in dump_block_stats()
7329 typename = zdb_ot_extname[t - DMU_OT_NUMTYPES]; in dump_block_stats()
7331 if (zcb->zcb_type[ZB_TOTAL][t].zb_asize == 0) { in dump_block_stats()
7333 "\t%5s\t%5s\t%6s\t%s\n", in dump_block_stats()
7334 "-", in dump_block_stats()
7335 "-", in dump_block_stats()
7336 "-", in dump_block_stats()
7337 "-", in dump_block_stats()
7338 "-", in dump_block_stats()
7339 "-", in dump_block_stats()
7340 "-", in dump_block_stats()
7345 for (l = ZB_TOTAL - 1; l >= -1; l--) { in dump_block_stats()
7346 level = (l == -1 ? ZB_TOTAL : l); in dump_block_stats()
7347 zb = &zcb->zcb_type[level][t]; in dump_block_stats()
7349 if (zb->zb_asize == 0) in dump_block_stats()
7354 mdstats->zb_count += zb->zb_count; in dump_block_stats()
7355 mdstats->zb_lsize += zb->zb_lsize; in dump_block_stats()
7356 mdstats->zb_psize += zb->zb_psize; in dump_block_stats()
7357 mdstats->zb_asize += zb->zb_asize; in dump_block_stats()
7358 mdstats->zb_gangs += zb->zb_gangs; in dump_block_stats()
7364 if (level == 0 && zb->zb_asize == in dump_block_stats()
7365 zcb->zcb_type[ZB_TOTAL][t].zb_asize) in dump_block_stats()
7368 zdb_nicenum(zb->zb_count, csize, in dump_block_stats()
7370 zdb_nicenum(zb->zb_lsize, lsize, in dump_block_stats()
7372 zdb_nicenum(zb->zb_psize, psize, in dump_block_stats()
7374 zdb_nicenum(zb->zb_asize, asize, in dump_block_stats()
7376 zdb_nicenum(zb->zb_asize / zb->zb_count, avg, in dump_block_stats()
7378 zdb_nicenum(zb->zb_gangs, gang, sizeof (gang)); in dump_block_stats()
7383 (double)zb->zb_lsize / zb->zb_psize, in dump_block_stats()
7384 100.0 * zb->zb_asize / tzb->zb_asize); in dump_block_stats()
7387 (void) printf("%s\n", typename); in dump_block_stats()
7389 (void) printf(" L%d %s\n", in dump_block_stats()
7392 if (dump_opt['b'] >= 3 && zb->zb_gangs > 0) { in dump_block_stats()
7394 "blocks: %s\n", gang); in dump_block_stats()
7399 "(in 512-byte sectors): " in dump_block_stats()
7400 "number of blocks\n"); in dump_block_stats()
7401 dump_histogram(zb->zb_psize_histogram, in dump_block_stats()
7406 zdb_nicenum(mdstats->zb_count, csize, in dump_block_stats()
7408 zdb_nicenum(mdstats->zb_lsize, lsize, in dump_block_stats()
7410 zdb_nicenum(mdstats->zb_psize, psize, in dump_block_stats()
7412 zdb_nicenum(mdstats->zb_asize, asize, in dump_block_stats()
7414 zdb_nicenum(mdstats->zb_asize / mdstats->zb_count, avg, in dump_block_stats()
7416 zdb_nicenum(mdstats->zb_gangs, gang, sizeof (gang)); in dump_block_stats()
7421 (double)mdstats->zb_lsize / mdstats->zb_psize, in dump_block_stats()
7422 100.0 * mdstats->zb_asize / tzb->zb_asize); in dump_block_stats()
7423 (void) printf("%s\n", "Metadata Total"); in dump_block_stats()
7433 (void) printf("\n"); in dump_block_stats()
7440 if (zcb->zcb_haderrors) { in dump_block_stats()
7468 if (zb->zb_level == ZB_DNODE_LEVEL || BP_IS_HOLE(bp) || in zdb_ddt_add_cb()
7472 if (dump_opt['S'] > 1 && zb->zb_level == ZB_ROOT_LEVEL) { in zdb_ddt_add_cb()
7474 "%lu blocks so far\n", in zdb_ddt_add_cb()
7475 (u_longlong_t)zb->zb_objset, in zdb_ddt_add_cb()
7490 zdde->zdde_key = zdde_search.zdde_key; in zdb_ddt_add_cb()
7494 zdde->zdde_ref_blocks += 1; in zdb_ddt_add_cb()
7495 zdde->zdde_ref_lsize += BP_GET_LSIZE(bp); in zdb_ddt_add_cb()
7496 zdde->zdde_ref_psize += BP_GET_PSIZE(bp); in zdb_ddt_add_cb()
7497 zdde->zdde_ref_dsize += bp_get_dsize_sync(spa, bp); in zdb_ddt_add_cb()
7522 uint64_t refcnt = zdde->zdde_ref_blocks; in dump_simulated_ddt()
7525 ddt_stat_t *dds = &ddh_total.ddh_stat[highbit64(refcnt) - 1]; in dump_simulated_ddt()
7527 dds->dds_blocks += zdde->zdde_ref_blocks / refcnt; in dump_simulated_ddt()
7528 dds->dds_lsize += zdde->zdde_ref_lsize / refcnt; in dump_simulated_ddt()
7529 dds->dds_psize += zdde->zdde_ref_psize / refcnt; in dump_simulated_ddt()
7530 dds->dds_dsize += zdde->zdde_ref_dsize / refcnt; in dump_simulated_ddt()
7532 dds->dds_ref_blocks += zdde->zdde_ref_blocks; in dump_simulated_ddt()
7533 dds->dds_ref_lsize += zdde->zdde_ref_lsize; in dump_simulated_ddt()
7534 dds->dds_ref_psize += zdde->zdde_ref_psize; in dump_simulated_ddt()
7535 dds->dds_ref_dsize += zdde->zdde_ref_dsize; in dump_simulated_ddt()
7544 (void) printf("Simulated DDT histogram:\n"); in dump_simulated_ddt()
7566 &spa->spa_condensing_indirect_phys; in verify_device_removal_feature_counts()
7567 if (scip->scip_next_mapping_object != 0) { in verify_device_removal_feature_counts()
7568 vdev_t *vd = spa->spa_root_vdev->vdev_child[scip->scip_vdev]; in verify_device_removal_feature_counts()
7569 ASSERT(scip->scip_prev_obsolete_sm_object != 0); in verify_device_removal_feature_counts()
7570 ASSERT3P(vd->vdev_ops, ==, &vdev_indirect_ops); in verify_device_removal_feature_counts()
7573 "object %llu, prev obsolete sm %llu\n", in verify_device_removal_feature_counts()
7574 (u_longlong_t)scip->scip_vdev, in verify_device_removal_feature_counts()
7575 (u_longlong_t)scip->scip_next_mapping_object, in verify_device_removal_feature_counts()
7576 (u_longlong_t)scip->scip_prev_obsolete_sm_object); in verify_device_removal_feature_counts()
7577 if (scip->scip_prev_obsolete_sm_object != 0) { in verify_device_removal_feature_counts()
7580 spa->spa_meta_objset, in verify_device_removal_feature_counts()
7581 scip->scip_prev_obsolete_sm_object, in verify_device_removal_feature_counts()
7582 0, vd->vdev_asize, 0)); in verify_device_removal_feature_counts()
7583 dump_spacemap(spa->spa_meta_objset, prev_obsolete_sm); in verify_device_removal_feature_counts()
7584 (void) printf("\n"); in verify_device_removal_feature_counts()
7591 for (uint64_t i = 0; i < spa->spa_root_vdev->vdev_children; i++) { in verify_device_removal_feature_counts()
7592 vdev_t *vd = spa->spa_root_vdev->vdev_child[i]; in verify_device_removal_feature_counts()
7593 vdev_indirect_config_t *vic = &vd->vdev_indirect_config; in verify_device_removal_feature_counts()
7595 if (vic->vic_mapping_object != 0) { in verify_device_removal_feature_counts()
7596 ASSERT(vd->vdev_ops == &vdev_indirect_ops || in verify_device_removal_feature_counts()
7597 vd->vdev_removing); in verify_device_removal_feature_counts()
7600 if (vd->vdev_indirect_mapping->vim_havecounts) { in verify_device_removal_feature_counts()
7608 ASSERT(vic->vic_mapping_object != 0); in verify_device_removal_feature_counts()
7615 ASSERT(vic->vic_mapping_object != 0); in verify_device_removal_feature_counts()
7630 "does not match feature count (%llu)\n", in verify_device_removal_feature_counts()
7635 "of %llu is correct\n", in verify_device_removal_feature_counts()
7655 "does not match feature count (%llu)\n", in verify_device_removal_feature_counts()
7659 "ob:%llu rd:%llu\n", in verify_device_removal_feature_counts()
7668 "of %llu is correct\n", in verify_device_removal_feature_counts()
7685 spa->spa_import_flags |= ZFS_IMPORT_SKIP_MMP; in zdb_set_skip_mmp()
7703 * The function returns a newly-allocated copy of the name of the
7718 size_t poolname_len = path_start - target; in import_checkpointed_state()
7729 "spa_get_stats() failed with error %d\n", in import_checkpointed_state()
7735 if (asprintf(&bogus_name, "%s%s", poolname, BOGUS_SUFFIX) == -1) { in import_checkpointed_state()
7749 "with error %d\n", bogus_name, error); in import_checkpointed_state()
7753 if (asprintf(new_path, "%s%s", bogus_name, path_start) == -1) { in import_checkpointed_state()
7781 vdev_t *vd = vcsec->vcsec_vd; in verify_checkpoint_sm_entry_cb()
7782 metaslab_t *ms = vd->vdev_ms[sme->sme_offset >> vd->vdev_ms_shift]; in verify_checkpoint_sm_entry_cb()
7783 uint64_t end = sme->sme_offset + sme->sme_run; in verify_checkpoint_sm_entry_cb()
7785 ASSERT(sme->sme_type == SM_FREE); in verify_checkpoint_sm_entry_cb()
7787 if ((vcsec->vcsec_entryid % ENTRIES_PER_PROGRESS_UPDATE) == 0) { in verify_checkpoint_sm_entry_cb()
7790 (longlong_t)vd->vdev_id, in verify_checkpoint_sm_entry_cb()
7791 (longlong_t)vcsec->vcsec_entryid, in verify_checkpoint_sm_entry_cb()
7792 (longlong_t)vcsec->vcsec_num_entries); in verify_checkpoint_sm_entry_cb()
7794 vcsec->vcsec_entryid++; in verify_checkpoint_sm_entry_cb()
7799 VERIFY3U(sme->sme_offset, >=, ms->ms_start); in verify_checkpoint_sm_entry_cb()
7800 VERIFY3U(end, <=, ms->ms_start + ms->ms_size); in verify_checkpoint_sm_entry_cb()
7807 mutex_enter(&ms->ms_lock); in verify_checkpoint_sm_entry_cb()
7808 zfs_range_tree_verify_not_present(ms->ms_allocatable, in verify_checkpoint_sm_entry_cb()
7809 sme->sme_offset, sme->sme_run); in verify_checkpoint_sm_entry_cb()
7810 mutex_exit(&ms->ms_lock); in verify_checkpoint_sm_entry_cb()
7832 vdev_t *ckpoint_rvd = checkpoint->spa_root_vdev; in verify_checkpoint_vdev_spacemaps()
7833 vdev_t *current_rvd = current->spa_root_vdev; in verify_checkpoint_vdev_spacemaps()
7837 for (uint64_t c = 0; c < ckpoint_rvd->vdev_children; c++) { in verify_checkpoint_vdev_spacemaps()
7838 vdev_t *ckpoint_vd = ckpoint_rvd->vdev_child[c]; in verify_checkpoint_vdev_spacemaps()
7839 vdev_t *current_vd = current_rvd->vdev_child[c]; in verify_checkpoint_vdev_spacemaps()
7844 if (ckpoint_vd->vdev_ops == &vdev_indirect_ops) { in verify_checkpoint_vdev_spacemaps()
7851 ASSERT3P(current_vd->vdev_ops, ==, &vdev_indirect_ops); in verify_checkpoint_vdev_spacemaps()
7859 if (current_vd->vdev_top_zap == 0 || in verify_checkpoint_vdev_spacemaps()
7861 current_vd->vdev_top_zap, in verify_checkpoint_vdev_spacemaps()
7866 current_vd->vdev_top_zap, VDEV_TOP_ZAP_POOL_CHECKPOINT_SM, in verify_checkpoint_vdev_spacemaps()
7870 checkpoint_sm_obj, 0, current_vd->vdev_asize, in verify_checkpoint_vdev_spacemaps()
7871 current_vd->vdev_ashift)); in verify_checkpoint_vdev_spacemaps()
7882 dump_spacemap(current->spa_meta_objset, checkpoint_sm); in verify_checkpoint_vdev_spacemaps()
7890 if (ckpoint_rvd->vdev_children < current_rvd->vdev_children) { in verify_checkpoint_vdev_spacemaps()
7891 for (uint64_t c = ckpoint_rvd->vdev_children; in verify_checkpoint_vdev_spacemaps()
7892 c < current_rvd->vdev_children; c++) { in verify_checkpoint_vdev_spacemaps()
7893 vdev_t *current_vd = current_rvd->vdev_child[c]; in verify_checkpoint_vdev_spacemaps()
7894 VERIFY3P(current_vd->vdev_checkpoint_sm, ==, NULL); in verify_checkpoint_vdev_spacemaps()
7899 (void) fprintf(stderr, "\n"); in verify_checkpoint_vdev_spacemaps()
7917 vdev_t *ckpoint_rvd = checkpoint->spa_root_vdev; in verify_checkpoint_ms_spacemaps()
7918 vdev_t *current_rvd = current->spa_root_vdev; in verify_checkpoint_ms_spacemaps()
7923 for (uint64_t i = 0; i < ckpoint_rvd->vdev_children; i++) { in verify_checkpoint_ms_spacemaps()
7924 vdev_t *ckpoint_vd = ckpoint_rvd->vdev_child[i]; in verify_checkpoint_ms_spacemaps()
7925 vdev_t *current_vd = current_rvd->vdev_child[i]; in verify_checkpoint_ms_spacemaps()
7927 if (ckpoint_vd->vdev_ops == &vdev_indirect_ops) { in verify_checkpoint_ms_spacemaps()
7931 ASSERT3P(current_vd->vdev_ops, ==, &vdev_indirect_ops); in verify_checkpoint_ms_spacemaps()
7935 for (uint64_t m = 0; m < ckpoint_vd->vdev_ms_count; m++) { in verify_checkpoint_ms_spacemaps()
7936 metaslab_t *ckpoint_msp = ckpoint_vd->vdev_ms[m]; in verify_checkpoint_ms_spacemaps()
7937 metaslab_t *current_msp = current_vd->vdev_ms[m]; in verify_checkpoint_ms_spacemaps()
7942 (longlong_t)current_vd->vdev_id, in verify_checkpoint_ms_spacemaps()
7943 (longlong_t)current_rvd->vdev_children, in verify_checkpoint_ms_spacemaps()
7944 (longlong_t)current_vd->vdev_ms[m]->ms_id, in verify_checkpoint_ms_spacemaps()
7945 (longlong_t)current_vd->vdev_ms_count); in verify_checkpoint_ms_spacemaps()
7959 zfs_range_tree_walk(ckpoint_msp->ms_allocatable, in verify_checkpoint_ms_spacemaps()
7962 current_msp->ms_allocatable); in verify_checkpoint_ms_spacemaps()
7967 (void) fprintf(stderr, "\n"); in verify_checkpoint_ms_spacemaps()
7984 checkpoint_pool = import_checkpointed_state(spa->spa_name, NULL, in verify_checkpoint_blocks()
7986 ASSERT(strcmp(spa->spa_name, checkpoint_pool) != 0); in verify_checkpoint_blocks()
7991 "error %d\n", checkpoint_pool, error); in verify_checkpoint_blocks()
8018 vdev_t *rvd = spa->spa_root_vdev; in dump_leftover_checkpoint_blocks()
8020 for (uint64_t i = 0; i < rvd->vdev_children; i++) { in dump_leftover_checkpoint_blocks()
8021 vdev_t *vd = rvd->vdev_child[i]; in dump_leftover_checkpoint_blocks()
8026 if (vd->vdev_top_zap == 0) in dump_leftover_checkpoint_blocks()
8029 if (zap_contains(spa_meta_objset(spa), vd->vdev_top_zap, in dump_leftover_checkpoint_blocks()
8033 VERIFY0(zap_lookup(spa_meta_objset(spa), vd->vdev_top_zap, in dump_leftover_checkpoint_blocks()
8038 checkpoint_sm_obj, 0, vd->vdev_asize, vd->vdev_ashift)); in dump_leftover_checkpoint_blocks()
8039 dump_spacemap(spa->spa_meta_objset, checkpoint_sm); in dump_leftover_checkpoint_blocks()
8053 error = zap_lookup(spa->spa_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in verify_checkpoint()
8064 "state found:\n"); in verify_checkpoint()
8070 "checkpointed uberblock in MOS\n", error); in verify_checkpoint()
8073 dump_uberblock(&checkpoint, "\nCheckpointed uberblock found:\n", "\n"); in verify_checkpoint()
8077 "uberblock\n"); in verify_checkpoint()
8092 (void) printf("MOS object %llu referenced but not allocated\n", in mos_leaks_cb()
8105 * Call on a MOS object that may already have been referenced.
8119 int error = zap_lookup(spa_meta_objset(vd->vdev_spa), in mos_leak_vdev_top_zap()
8120 vd->vdev_top_zap, VDEV_TOP_ZAP_MS_UNFLUSHED_PHYS_TXGS, in mos_leak_vdev_top_zap()
8132 mos_obj_refd(vd->vdev_dtl_object); in mos_leak_vdev()
8133 mos_obj_refd(vd->vdev_ms_array); in mos_leak_vdev()
8134 mos_obj_refd(vd->vdev_indirect_config.vic_births_object); in mos_leak_vdev()
8135 mos_obj_refd(vd->vdev_indirect_config.vic_mapping_object); in mos_leak_vdev()
8136 mos_obj_refd(vd->vdev_leaf_zap); in mos_leak_vdev()
8137 if (vd->vdev_checkpoint_sm != NULL) in mos_leak_vdev()
8138 mos_obj_refd(vd->vdev_checkpoint_sm->sm_object); in mos_leak_vdev()
8139 if (vd->vdev_indirect_mapping != NULL) { in mos_leak_vdev()
8140 mos_obj_refd(vd->vdev_indirect_mapping-> in mos_leak_vdev()
8141 vim_phys->vimp_counts_object); in mos_leak_vdev()
8143 if (vd->vdev_obsolete_sm != NULL) in mos_leak_vdev()
8144 mos_obj_refd(vd->vdev_obsolete_sm->sm_object); in mos_leak_vdev()
8146 for (uint64_t m = 0; m < vd->vdev_ms_count; m++) { in mos_leak_vdev()
8147 metaslab_t *ms = vd->vdev_ms[m]; in mos_leak_vdev()
8148 mos_obj_refd(space_map_object(ms->ms_sm)); in mos_leak_vdev()
8151 if (vd->vdev_root_zap != 0) in mos_leak_vdev()
8152 mos_obj_refd(vd->vdev_root_zap); in mos_leak_vdev()
8154 if (vd->vdev_top_zap != 0) { in mos_leak_vdev()
8155 mos_obj_refd(vd->vdev_top_zap); in mos_leak_vdev()
8159 for (uint64_t c = 0; c < vd->vdev_children; c++) { in mos_leak_vdev()
8160 mos_leak_vdev(vd->vdev_child[c]); in mos_leak_vdev()
8176 for (spa_log_sm_t *sls = avl_first(&spa->spa_sm_logs_by_txg); in mos_leak_log_spacemaps()
8177 sls; sls = AVL_NEXT(&spa->spa_sm_logs_by_txg, sls)) in mos_leak_log_spacemaps()
8178 mos_obj_refd(sls->sls_sm_obj); in mos_leak_log_spacemaps()
8182 errorlog_count_refd(objset_t *mos, uint64_t errlog) in errorlog_count_refd() argument
8186 for (zap_cursor_init(&zc, mos, errlog); in errorlog_count_refd()
8189 mos_obj_refd(za->za_first_integer); in errorlog_count_refd()
8199 objset_t *mos = spa->spa_meta_objset; in dump_mos_leaks() local
8200 dsl_pool_t *dp = spa->spa_dsl_pool; in dump_mos_leaks()
8202 /* Visit and mark all referenced objects in the MOS */ in dump_mos_leaks()
8205 mos_obj_refd(spa->spa_pool_props_object); in dump_mos_leaks()
8206 mos_obj_refd(spa->spa_config_object); in dump_mos_leaks()
8207 mos_obj_refd(spa->spa_ddt_stat_object); in dump_mos_leaks()
8208 mos_obj_refd(spa->spa_feat_desc_obj); in dump_mos_leaks()
8209 mos_obj_refd(spa->spa_feat_enabled_txg_obj); in dump_mos_leaks()
8210 mos_obj_refd(spa->spa_feat_for_read_obj); in dump_mos_leaks()
8211 mos_obj_refd(spa->spa_feat_for_write_obj); in dump_mos_leaks()
8212 mos_obj_refd(spa->spa_history); in dump_mos_leaks()
8213 mos_obj_refd(spa->spa_errlog_last); in dump_mos_leaks()
8214 mos_obj_refd(spa->spa_errlog_scrub); in dump_mos_leaks()
8217 errorlog_count_refd(mos, spa->spa_errlog_last); in dump_mos_leaks()
8218 errorlog_count_refd(mos, spa->spa_errlog_scrub); in dump_mos_leaks()
8221 mos_obj_refd(spa->spa_all_vdev_zaps); in dump_mos_leaks()
8222 mos_obj_refd(spa->spa_dsl_pool->dp_bptree_obj); in dump_mos_leaks()
8223 mos_obj_refd(spa->spa_dsl_pool->dp_tmp_userrefs_obj); in dump_mos_leaks()
8224 mos_obj_refd(spa->spa_dsl_pool->dp_scan->scn_phys.scn_queue_obj); in dump_mos_leaks()
8225 bpobj_count_refd(&spa->spa_deferred_bpobj); in dump_mos_leaks()
8226 mos_obj_refd(dp->dp_empty_bpobj); in dump_mos_leaks()
8227 bpobj_count_refd(&dp->dp_obsolete_bpobj); in dump_mos_leaks()
8228 bpobj_count_refd(&dp->dp_free_bpobj); in dump_mos_leaks()
8229 mos_obj_refd(spa->spa_l2cache.sav_object); in dump_mos_leaks()
8230 mos_obj_refd(spa->spa_spares.sav_object); in dump_mos_leaks()
8232 if (spa->spa_syncing_log_sm != NULL) in dump_mos_leaks()
8233 mos_obj_refd(spa->spa_syncing_log_sm->sm_object); in dump_mos_leaks()
8236 mos_obj_refd(spa->spa_condensing_indirect_phys. in dump_mos_leaks()
8238 mos_obj_refd(spa->spa_condensing_indirect_phys. in dump_mos_leaks()
8240 if (spa->spa_condensing_indirect_phys.scip_next_mapping_object != 0) { in dump_mos_leaks()
8242 vdev_indirect_mapping_open(mos, in dump_mos_leaks()
8243 spa->spa_condensing_indirect_phys.scip_next_mapping_object); in dump_mos_leaks()
8244 mos_obj_refd(vim->vim_phys->vimp_counts_object); in dump_mos_leaks()
8249 if (dp->dp_origin_snap != NULL) { in dump_mos_leaks()
8254 dsl_dataset_phys(dp->dp_origin_snap)->ds_next_snap_obj, in dump_mos_leaks()
8257 dump_blkptr_list(&ds->ds_deadlist, "Deadlist"); in dump_mos_leaks()
8261 count_ds_mos_objects(dp->dp_origin_snap); in dump_mos_leaks()
8262 dump_blkptr_list(&dp->dp_origin_snap->ds_deadlist, "Deadlist"); in dump_mos_leaks()
8264 count_dir_mos_objects(dp->dp_mos_dir); in dump_mos_leaks()
8265 if (dp->dp_free_dir != NULL) in dump_mos_leaks()
8266 count_dir_mos_objects(dp->dp_free_dir); in dump_mos_leaks()
8267 if (dp->dp_leak_dir != NULL) in dump_mos_leaks()
8268 count_dir_mos_objects(dp->dp_leak_dir); in dump_mos_leaks()
8270 mos_leak_vdev(spa->spa_root_vdev); in dump_mos_leaks()
8273 ddt_t *ddt = spa->spa_ddt[c]; in dump_mos_leaks()
8274 if (!ddt || ddt->ddt_version == DDT_VERSION_UNCONFIGURED) in dump_mos_leaks()
8281 mos_obj_refd(ddt->ddt_object[type][class]); in dump_mos_leaks()
8286 if (ddt->ddt_version == DDT_VERSION_FDT) in dump_mos_leaks()
8287 mos_obj_refd(ddt->ddt_dir_object); in dump_mos_leaks()
8290 if (ddt->ddt_flags & DDT_FLAG_LOG) { in dump_mos_leaks()
8291 mos_obj_refd(ddt->ddt_log[0].ddl_object); in dump_mos_leaks()
8292 mos_obj_refd(ddt->ddt_log[1].ddl_object); in dump_mos_leaks()
8296 for (uint64_t vdevid = 0; vdevid < spa->spa_brt_nvdevs; vdevid++) { in dump_mos_leaks()
8297 brt_vdev_t *brtvd = spa->spa_brt_vdevs[vdevid]; in dump_mos_leaks()
8298 if (brtvd->bv_initiated) { in dump_mos_leaks()
8299 mos_obj_refd(brtvd->bv_mos_brtvdev); in dump_mos_leaks()
8300 mos_obj_refd(brtvd->bv_mos_entries); in dump_mos_leaks()
8308 while (dmu_object_next(mos, &object, B_FALSE, 0) == 0) { in dump_mos_leaks()
8314 VERIFY0(dmu_object_info(mos, object, &doi)); in dump_mos_leaks()
8323 (void) printf("MOS object %llu (%s) leaked\n", in dump_mos_leaks()
8352 uint64_t offset = sme->sme_offset; in log_spacemap_obsolete_stats_cb()
8353 uint64_t vdev_id = sme->sme_vdev; in log_spacemap_obsolete_stats_cb()
8355 if (lsos->lsos_current_txg == 0) { in log_spacemap_obsolete_stats_cb()
8357 lsos->lsos_current_txg = txg; in log_spacemap_obsolete_stats_cb()
8358 } else if (lsos->lsos_current_txg < txg) { in log_spacemap_obsolete_stats_cb()
8359 /* we just changed log - print stats and reset */ in log_spacemap_obsolete_stats_cb()
8360 (void) printf("%-8llu valid entries out of %-8llu - txg %llu\n", in log_spacemap_obsolete_stats_cb()
8361 (u_longlong_t)lsos->lsos_valid_sm_entries, in log_spacemap_obsolete_stats_cb()
8362 (u_longlong_t)lsos->lsos_sm_entries, in log_spacemap_obsolete_stats_cb()
8363 (u_longlong_t)lsos->lsos_current_txg); in log_spacemap_obsolete_stats_cb()
8364 lsos->lsos_valid_sm_entries = 0; in log_spacemap_obsolete_stats_cb()
8365 lsos->lsos_sm_entries = 0; in log_spacemap_obsolete_stats_cb()
8366 lsos->lsos_current_txg = txg; in log_spacemap_obsolete_stats_cb()
8368 ASSERT3U(lsos->lsos_current_txg, ==, txg); in log_spacemap_obsolete_stats_cb()
8370 lsos->lsos_sm_entries++; in log_spacemap_obsolete_stats_cb()
8371 lsos->lsos_total_entries++; in log_spacemap_obsolete_stats_cb()
8377 metaslab_t *ms = vd->vdev_ms[offset >> vd->vdev_ms_shift]; in log_spacemap_obsolete_stats_cb()
8378 ASSERT(sme->sme_type == SM_ALLOC || sme->sme_type == SM_FREE); in log_spacemap_obsolete_stats_cb()
8382 lsos->lsos_valid_sm_entries++; in log_spacemap_obsolete_stats_cb()
8383 lsos->lsos_valid_entries++; in log_spacemap_obsolete_stats_cb()
8395 (void) printf("Log Space Map Obsolete Entry Statistics:\n"); in dump_log_spacemap_obsolete_stats()
8401 (void) printf("%-8llu valid entries out of %-8llu - txg %llu\n", in dump_log_spacemap_obsolete_stats()
8406 (void) printf("%-8llu valid entries out of %-8llu - total\n\n", in dump_log_spacemap_obsolete_stats()
8427 (void) printf("\nCached configuration:\n"); in dump_zpool()
8428 dump_nvlist(spa->spa_config, 8); in dump_zpool()
8435 dump_uberblock(&spa->spa_uberblock, "\nUberblock:\n", "\n"); in dump_zpool()
8456 dump_objset(dp->dp_meta_objset); in dump_zpool()
8459 dsl_pool_t *dp = spa->spa_dsl_pool; in dump_zpool()
8460 dump_full_bpobj(&spa->spa_deferred_bpobj, in dump_zpool()
8463 dump_full_bpobj(&dp->dp_free_bpobj, in dump_zpool()
8466 if (bpobj_is_open(&dp->dp_obsolete_bpobj)) { in dump_zpool()
8469 dump_full_bpobj(&dp->dp_obsolete_bpobj, in dump_zpool()
8475 dump_bptree(spa->spa_meta_objset, in dump_zpool()
8476 dp->dp_bptree_obj, in dump_zpool()
8479 dump_dtl(spa->spa_root_vdev, 0); in dump_zpool()
8520 "%lld consumers != %lld refcount\n", in dump_zpool()
8526 "of %llu is correct\n", in dump_zpool()
8578 (void) printf("%s\n", blkbuf); in zdb_print_blkptr()
8620 (void) printf("\n%s\n%6s %s 0123456789abcdef\n", label, "", hdr); in zdb_dump_block()
8635 (void) printf("\n"); in zdb_dump_block()
8641 * leaf_name - For example: c1t0d0 or /tmp/ztest.0a
8642 * child[.child]* - For example: 0.1.1
8646 * RAID-Zs, you can specify either RAID-Z vdev with 0.0 or 0.1 .
8661 if (i >= vdev->vdev_children) in zdb_vdev_lookup()
8664 vdev = vdev->vdev_child[i]; in zdb_vdev_lookup()
8670 for (i = 0; i < vdev->vdev_children; i++) { in zdb_vdev_lookup()
8671 vdev_t *vc = vdev->vdev_child[i]; in zdb_vdev_lookup()
8673 if (vc->vdev_path == NULL) { in zdb_vdev_lookup()
8681 p = strrchr(vc->vdev_path, '/'); in zdb_vdev_lookup()
8682 p = p ? p + 1 : vc->vdev_path; in zdb_vdev_lookup()
8683 q = &vc->vdev_path[strlen(vc->vdev_path) - 2]; in zdb_vdev_lookup()
8685 if (strcmp(vc->vdev_path, path) == 0) in zdb_vdev_lookup()
8689 if (strcmp(q, "s0") == 0 && strncmp(p, path, q - p) == 0) in zdb_vdev_lookup()
8701 dsl_pool_config_enter(spa->spa_dsl_pool, FTAG); in name_from_objset_id()
8702 int error = dsl_dataset_hold_obj(spa->spa_dsl_pool, objset_id, in name_from_objset_id()
8705 (void) fprintf(stderr, "failed to hold objset %llu: %s\n", in name_from_objset_id()
8707 dsl_pool_config_exit(spa->spa_dsl_pool, FTAG); in name_from_objset_id()
8712 dsl_pool_config_exit(spa->spa_dsl_pool, FTAG); in name_from_objset_id()
8741 "Trying %05llx -> %05llx (%s)\n", in try_decompress_block()
8849 "by setting and exporting ZDB_NO_ZLE=\"true\"\n"); in zdb_decompress_block()
8852 return (lsize > maxlsize ? -1 : lsize); in zdb_decompress_block()
8861 * pool - The name of the pool you wish to read from
8862 * vdev_specifier - Which vdev (see comment for zdb_vdev_lookup)
8863 * offset - offset, in hex, in bytes
8864 * size - Amount of data to read, in hex, in bytes
8865 * flags - A string of characters specifying options
8880 dva_t *dva = bp->blk_dva; in zdb_read_block()
8908 (void) printf("Invalid block specifier: %s - %s\n", in zdb_read_block()
8922 (void) printf("***Ignoring flag: %c\n", in zdb_read_block()
8950 " '%c'\n", (uchar_t)*p); in zdb_read_block()
8957 "must be divisible by 0x%x\n", in zdb_read_block()
8962 printf("Invalid flag arg: '%s'\n", flagstr); in zdb_read_block()
8966 vd = zdb_vdev_lookup(spa->spa_root_vdev, vdev); in zdb_read_block()
8968 (void) printf("***Invalid vdev: %s\n", vdev); in zdb_read_block()
8971 if (vd->vdev_path) in zdb_read_block()
8972 (void) fprintf(stderr, "Found vdev: %s\n", in zdb_read_block()
8973 vd->vdev_path); in zdb_read_block()
8975 (void) fprintf(stderr, "Found vdev type: %s\n", in zdb_read_block()
8976 vd->vdev_ops->vdev_op_type); in zdb_read_block()
8984 DVA_SET_VDEV(&dva[0], vd->vdev_id); in zdb_read_block()
9003 if (vd == vd->vdev_top) { in zdb_read_block()
9025 (void) printf("Read of %s failed, error: %d\n", thing, error); in zdb_read_block()
9034 if (lsize == -1) { in zdb_read_block()
9035 (void) printf("Decompress of %s failed\n", thing); in zdb_read_block()
9059 if (lsize == -1 || zfs_blkptr_verify(spa, b, in zdb_read_block()
9061 printf("invalid block pointer at this DVA\n"); in zdb_read_block()
9088 (void) printf("\n"); in zdb_read_block()
9100 if (vd == vd->vdev_top) { in zdb_read_block()
9120 ck_zio->io_offset = in zdb_read_block()
9121 DVA_GET_OFFSET(&bp->blk_dva[0]); in zdb_read_block()
9122 ck_zio->io_bp = bp; in zdb_read_block()
9126 "cksum=%016llx:%016llx:%016llx:%016llx\n", in zdb_read_block()
9128 (u_longlong_t)bp->blk_cksum.zc_word[0], in zdb_read_block()
9129 (u_longlong_t)bp->blk_cksum.zc_word[1], in zdb_read_block()
9130 (u_longlong_t)bp->blk_cksum.zc_word[2], in zdb_read_block()
9131 (u_longlong_t)bp->blk_cksum.zc_word[3]); in zdb_read_block()
9134 printf("error %d reading block\n", error); in zdb_read_block()
9166 (void) fprintf(stderr, "invalid input format\n"); in zdb_embedded_block()
9172 (void) fprintf(stderr, "out of memory\n"); in zdb_embedded_block()
9177 (void) fprintf(stderr, "decode failed: %u\n", err); in zdb_embedded_block()
9227 int64_t objset_id = -1; in main()
9242 * Set up signal handlers, so if we crash due to bad on-disk data we in main()
9250 (void) fprintf(stderr, "zdb: cannot catch SIGSEGV: %s\n", in main()
9254 (void) fprintf(stderr, "zdb: cannot catch SIGABRT: %s\n", in main()
9260 * default spa_config_path setting. If -U flag is specified it will in main()
9275 {"ignore-assertions", no_argument, NULL, 'A'}, in main()
9276 {"block-stats", no_argument, NULL, 'b'}, in main()
9281 {"dedup-stats", no_argument, NULL, 'D'}, in main()
9283 {"embedded-block-pointer", no_argument, NULL, 'E'}, in main()
9284 {"automatic-rewind", no_argument, NULL, 'F'}, in main()
9285 {"dump-debug-msg", no_argument, NULL, 'G'}, in main()
9287 {"intent-logs", no_argument, NULL, 'i'}, in main()
9289 {"checkpointed-state", no_argument, NULL, 'k'}, in main()
9292 {"disable-leak-tracking", no_argument, NULL, 'L'}, in main()
9294 {"metaslab-groups", no_argument, NULL, 'M'}, in main()
9295 {"numeric", no_argument, NULL, 'N'}, in main()
9297 {"object-lookups", no_argument, NULL, 'O'}, in main()
9300 {"skip-label", no_argument, NULL, 'q'}, in main()
9301 {"copy-object", no_argument, NULL, 'r'}, in main()
9302 {"read-block", no_argument, NULL, 'R'}, in main()
9303 {"io-stats", no_argument, NULL, 's'}, in main()
9304 {"simulate-dedup", no_argument, NULL, 'S'}, in main()
9306 {"brt-stats", no_argument, NULL, 'T'}, in main()
9311 {"dump-blocks", required_argument, NULL, 'x'}, in main()
9312 {"extreme-rewind", no_argument, NULL, 'X'}, in main()
9313 {"all-reconstruction", no_argument, NULL, 'Y'}, in main()
9315 {"zstd-headers", no_argument, NULL, 'Z'}, in main()
9321 long_options, NULL)) != -1) { in main()
9336 case 'N': in main()
9369 "than 0\n"); in main()
9403 "specified: %s\n", optarg); in main()
9413 "(i.e. start with a slash)\n"); in main()
9433 (void) fprintf(stderr, "-p option requires use of -e\n"); in main()
9438 * ZDB does not typically re-read blocks; therefore limit the ARC in main()
9446 * "zdb -c" uses checksum-verifying scrub i/os which are async reads. in main()
9447 * "zdb -b" uses traversal prefetch which uses async reads. in main()
9459 * to load non-idle pools. in main()
9481 argc -= optind; in main()
9507 value = "-"; in main()
9516 } else if ((strcmp(pbuf, "-") == 0 && in main()
9560 /* -N implies -d */ in main()
9561 if (dump_opt['N'] && dump_opt['d'] == 0) in main()
9562 dump_opt['d'] = dump_opt['N']; in main()
9579 if (targetlen && target[targetlen - 1] == '/') in main()
9580 target[targetlen - 1] = '\0'; in main()
9583 * See if an objset ID was supplied (-d <pool>/<objset ID>). in main()
9585 * if -N was given, otherwise 100 is an objsetID iff in main()
9598 if (dump_opt['N']) in main()
9603 objset_id = -1; in main()
9606 dump_opt['N']) { in main()
9607 printf("Supply a numeric objset ID with -N\n"); in main()
9646 (void) printf("\nConfiguration for import:\n"); in main()
9665 * We need to make sure to process -O option or call in main()
9666 * dump_path after the -e option has been processed, in main()
9692 * it always after the -e option has been processed, which in main()
9722 "spa_open() failed with error %d\n", in main()
9739 spa->spa_log_state == SPA_LOG_MISSING) { in main()
9740 spa->spa_log_state = SPA_LOG_CLEAR; in main()
9771 * If -N was supplied, the user has indicated that in main()
9772 * zdb -d <pool>/<objsetID> is in effect. Otherwise in main()
9824 spa->spa_failmode = ZIO_FAILURE_MODE_PANIC; in main()
9827 argc--; in main()
9848 fatal("Bad object or range: '%s': %s\n", in main()
9869 dump_objset(spa->spa_meta_objset); in main()