1*a4e5e010SMartin Matuska #define ZDB_COMPRESS_NAME(idx) ((idx) < ZIO_COMPRESS_FUNCTIONS ? \ 2*a4e5e010SMartin Matuska zio_compress_table[(idx)].ci_name : "UNKNOWN") 3*a4e5e010SMartin Matuska #define ZDB_CHECKSUM_NAME(idx) ((idx) < ZIO_CHECKSUM_FUNCTIONS ? \ 4*a4e5e010SMartin Matuska zio_checksum_table[(idx)].ci_name : "UNKNOWN") 5*a4e5e010SMartin Matuska #define ZDB_OT_TYPE(idx) ((idx) < DMU_OT_NUMTYPES ? (idx) : \ 6*a4e5e010SMartin Matuska (idx) == DMU_OTN_ZAP_DATA || (idx) == DMU_OTN_ZAP_METADATA ? \ 7*a4e5e010SMartin Matuska DMU_OT_ZAP_OTHER : \ 8*a4e5e010SMartin Matuska (idx) == DMU_OTN_UINT64_DATA || (idx) == DMU_OTN_UINT64_METADATA ? \ 9*a4e5e010SMartin Matuska DMU_OT_UINT64_OTHER : DMU_OT_NUMTYPES) 10*a4e5e010SMartin Matuska 11*a4e5e010SMartin Matuska /* Some platforms require part of inode IDs to be remapped */ 12*a4e5e010SMartin Matuska #ifdef __APPLE__ 13*a4e5e010SMartin Matuska #define ZDB_MAP_OBJECT_ID(obj) INO_XNUTOZFS(obj, 2) 14*a4e5e010SMartin Matuska #else 15*a4e5e010SMartin Matuska #define ZDB_MAP_OBJECT_ID(obj) (obj) 16*a4e5e010SMartin Matuska #endif 17*a4e5e010SMartin Matuska 18*a4e5e010SMartin Matuska #define ZOR_FLAG_PLAIN_FILE 0x0001 19*a4e5e010SMartin Matuska #define ZOR_FLAG_DIRECTORY 0x0002 20*a4e5e010SMartin Matuska #define ZOR_FLAG_SPACE_MAP 0x0004 21*a4e5e010SMartin Matuska #define ZOR_FLAG_ZAP 0x0008 22*a4e5e010SMartin Matuska #define ZOR_FLAG_ALL_TYPES -1 23*a4e5e010SMartin Matuska #define ZOR_SUPPORTED_FLAGS (ZOR_FLAG_PLAIN_FILE | \ 24*a4e5e010SMartin Matuska ZOR_FLAG_DIRECTORY | \ 25*a4e5e010SMartin Matuska ZOR_FLAG_SPACE_MAP | \ 26*a4e5e010SMartin Matuska ZOR_FLAG_ZAP) 27*a4e5e010SMartin Matuska 28*a4e5e010SMartin Matuska #define ZDB_FLAG_CHECKSUM 0x0001 29*a4e5e010SMartin Matuska #define ZDB_FLAG_DECOMPRESS 0x0002 30*a4e5e010SMartin Matuska #define ZDB_FLAG_BSWAP 0x0004 31*a4e5e010SMartin Matuska #define ZDB_FLAG_GBH 0x0008 32*a4e5e010SMartin Matuska #define ZDB_FLAG_INDIRECT 0x0010 33*a4e5e010SMartin Matuska #define ZDB_FLAG_RAW 0x0020 34*a4e5e010SMartin Matuska #define ZDB_FLAG_PRINT_BLKPTR 0x0040 35*a4e5e010SMartin Matuska #define ZDB_FLAG_VERBOSE 0x0080 36*a4e5e010SMartin Matuska 37*a4e5e010SMartin Matuska 38*a4e5e010SMartin Matuska typedef struct zdb_ctx { 39*a4e5e010SMartin Matuska } zdb_ctx_t; 40*a4e5e010SMartin Matuska 41*a4e5e010SMartin Matuska typedef struct zopt_object_range { 42*a4e5e010SMartin Matuska uint64_t zor_obj_start; 43*a4e5e010SMartin Matuska uint64_t zor_obj_end; 44*a4e5e010SMartin Matuska uint64_t zor_flags; 45*a4e5e010SMartin Matuska } zopt_object_range_t; 46*a4e5e010SMartin Matuska 47*a4e5e010SMartin Matuska 48*a4e5e010SMartin Matuska typedef struct sublivelist_verify { 49*a4e5e010SMartin Matuska /* FREE's that haven't yet matched to an ALLOC, in one sub-livelist */ 50*a4e5e010SMartin Matuska zfs_btree_t sv_pair; 51*a4e5e010SMartin Matuska 52*a4e5e010SMartin Matuska /* ALLOC's without a matching FREE, accumulates across sub-livelists */ 53*a4e5e010SMartin Matuska zfs_btree_t sv_leftover; 54*a4e5e010SMartin Matuska } sublivelist_verify_t; 55*a4e5e010SMartin Matuska 56*a4e5e010SMartin Matuska typedef struct sublivelist_verify_block { 57*a4e5e010SMartin Matuska dva_t svb_dva; 58*a4e5e010SMartin Matuska 59*a4e5e010SMartin Matuska /* 60*a4e5e010SMartin Matuska * We need this to check if the block marked as allocated 61*a4e5e010SMartin Matuska * in the livelist was freed (and potentially reallocated) 62*a4e5e010SMartin Matuska * in the metaslab spacemaps at a later TXG. 63*a4e5e010SMartin Matuska */ 64*a4e5e010SMartin Matuska uint64_t svb_allocated_txg; 65*a4e5e010SMartin Matuska } sublivelist_verify_block_t; 66*a4e5e010SMartin Matuska 67*a4e5e010SMartin Matuska const char *zdb_ot_name(dmu_object_type_t type); 68*a4e5e010SMartin Matuska int livelist_compare(const void *larg, const void *rarg); 69