88
88
#include <libnvpair.h>
89
89
#include <libzutil.h>
90
90
91
- #include "zdb.h"
91
+ #include <libzdb.h>
92
92
93
- #define ZDB_COMPRESS_NAME (idx ) ((idx) < ZIO_COMPRESS_FUNCTIONS ? \
94
- zio_compress_table[(idx)].ci_name : "UNKNOWN")
95
- #define ZDB_CHECKSUM_NAME (idx ) ((idx) < ZIO_CHECKSUM_FUNCTIONS ? \
96
- zio_checksum_table[(idx)].ci_name : "UNKNOWN")
97
- #define ZDB_OT_TYPE (idx ) ((idx) < DMU_OT_NUMTYPES ? (idx) : \
98
- (idx) == DMU_OTN_ZAP_DATA || (idx) == DMU_OTN_ZAP_METADATA ? \
99
- DMU_OT_ZAP_OTHER : \
100
- (idx) == DMU_OTN_UINT64_DATA || (idx) == DMU_OTN_UINT64_METADATA ? \
101
- DMU_OT_UINT64_OTHER : DMU_OT_NUMTYPES)
102
-
103
- /* Some platforms require part of inode IDs to be remapped */
104
- #ifdef __APPLE__
105
- #define ZDB_MAP_OBJECT_ID (obj ) INO_XNUTOZFS(obj, 2)
106
- #else
107
- #define ZDB_MAP_OBJECT_ID (obj ) (obj)
108
- #endif
93
+ #include "zdb.h"
109
94
110
- static const char *
111
- zdb_ot_name (dmu_object_type_t type )
112
- {
113
- if (type < DMU_OT_NUMTYPES )
114
- return (dmu_ot [type ].ot_name );
115
- else if ((type & DMU_OT_NEWTYPE ) &&
116
- ((type & DMU_OT_BYTESWAP_MASK ) < DMU_BSWAP_NUMFUNCS ))
117
- return (dmu_ot_byteswap [type & DMU_OT_BYTESWAP_MASK ].ob_name );
118
- else
119
- return ("UNKNOWN" );
120
- }
121
95
122
96
extern int reference_tracking_enable ;
123
97
extern int zfs_recover ;
@@ -135,35 +109,12 @@ typedef void object_viewer_t(objset_t *, uint64_t, void *data, size_t size);
135
109
static uint64_t * zopt_metaslab = NULL ;
136
110
static unsigned zopt_metaslab_args = 0 ;
137
111
138
- typedef struct zopt_object_range {
139
- uint64_t zor_obj_start ;
140
- uint64_t zor_obj_end ;
141
- uint64_t zor_flags ;
142
- } zopt_object_range_t ;
143
112
144
113
static zopt_object_range_t * zopt_object_ranges = NULL ;
145
114
static unsigned zopt_object_args = 0 ;
146
115
147
116
static int flagbits [256 ];
148
117
149
- #define ZOR_FLAG_PLAIN_FILE 0x0001
150
- #define ZOR_FLAG_DIRECTORY 0x0002
151
- #define ZOR_FLAG_SPACE_MAP 0x0004
152
- #define ZOR_FLAG_ZAP 0x0008
153
- #define ZOR_FLAG_ALL_TYPES -1
154
- #define ZOR_SUPPORTED_FLAGS (ZOR_FLAG_PLAIN_FILE | \
155
- ZOR_FLAG_DIRECTORY | \
156
- ZOR_FLAG_SPACE_MAP | \
157
- ZOR_FLAG_ZAP)
158
-
159
- #define ZDB_FLAG_CHECKSUM 0x0001
160
- #define ZDB_FLAG_DECOMPRESS 0x0002
161
- #define ZDB_FLAG_BSWAP 0x0004
162
- #define ZDB_FLAG_GBH 0x0008
163
- #define ZDB_FLAG_INDIRECT 0x0010
164
- #define ZDB_FLAG_RAW 0x0020
165
- #define ZDB_FLAG_PRINT_BLKPTR 0x0040
166
- #define ZDB_FLAG_VERBOSE 0x0080
167
118
168
119
static uint64_t max_inflight_bytes = 256 * 1024 * 1024 ; /* 256MB */
169
120
static int leaked_objects = 0 ;
@@ -176,62 +127,7 @@ static void mos_obj_refd_multiple(uint64_t);
176
127
static int dump_bpobj_cb (void * arg , const blkptr_t * bp , boolean_t free ,
177
128
dmu_tx_t * tx );
178
129
179
- typedef struct sublivelist_verify {
180
- /* FREE's that haven't yet matched to an ALLOC, in one sub-livelist */
181
- zfs_btree_t sv_pair ;
182
-
183
- /* ALLOC's without a matching FREE, accumulates across sub-livelists */
184
- zfs_btree_t sv_leftover ;
185
- } sublivelist_verify_t ;
186
-
187
- static int
188
- livelist_compare (const void * larg , const void * rarg )
189
- {
190
- const blkptr_t * l = larg ;
191
- const blkptr_t * r = rarg ;
192
130
193
- /* Sort them according to dva[0] */
194
- uint64_t l_dva0_vdev , r_dva0_vdev ;
195
- l_dva0_vdev = DVA_GET_VDEV (& l -> blk_dva [0 ]);
196
- r_dva0_vdev = DVA_GET_VDEV (& r -> blk_dva [0 ]);
197
- if (l_dva0_vdev < r_dva0_vdev )
198
- return (-1 );
199
- else if (l_dva0_vdev > r_dva0_vdev )
200
- return (+1 );
201
-
202
- /* if vdevs are equal, sort by offsets. */
203
- uint64_t l_dva0_offset ;
204
- uint64_t r_dva0_offset ;
205
- l_dva0_offset = DVA_GET_OFFSET (& l -> blk_dva [0 ]);
206
- r_dva0_offset = DVA_GET_OFFSET (& r -> blk_dva [0 ]);
207
- if (l_dva0_offset < r_dva0_offset ) {
208
- return (-1 );
209
- } else if (l_dva0_offset > r_dva0_offset ) {
210
- return (+1 );
211
- }
212
-
213
- /*
214
- * Since we're storing blkptrs without cancelling FREE/ALLOC pairs,
215
- * it's possible the offsets are equal. In that case, sort by txg
216
- */
217
- if (l -> blk_birth < r -> blk_birth ) {
218
- return (-1 );
219
- } else if (l -> blk_birth > r -> blk_birth ) {
220
- return (+1 );
221
- }
222
- return (0 );
223
- }
224
-
225
- typedef struct sublivelist_verify_block {
226
- dva_t svb_dva ;
227
-
228
- /*
229
- * We need this to check if the block marked as allocated
230
- * in the livelist was freed (and potentially reallocated)
231
- * in the metaslab spacemaps at a later TXG.
232
- */
233
- uint64_t svb_allocated_txg ;
234
- } sublivelist_verify_block_t ;
235
131
236
132
static void zdb_print_blkptr (const blkptr_t * bp , int flags );
237
133
0 commit comments