xref: /freebsd/sys/contrib/openzfs/include/libzdb.h (revision a4e5e0106ac7145f56eb39a691e302cabb4635be)
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