@@ -1117,61 +1117,62 @@ dump_zap(objset_t *os, uint64_t object, void *data, size_t size)
1117
1117
{
1118
1118
(void ) data , (void ) size ;
1119
1119
zap_cursor_t zc ;
1120
- zap_attribute_t attr ;
1120
+ zap_attribute_t * attrp = zap_attribute_alloc () ;
1121
1121
void * prop ;
1122
1122
unsigned i ;
1123
1123
1124
1124
dump_zap_stats (os , object );
1125
1125
(void ) printf ("\n" );
1126
1126
1127
1127
for (zap_cursor_init (& zc , os , object );
1128
- zap_cursor_retrieve (& zc , & attr ) == 0 ;
1128
+ zap_cursor_retrieve (& zc , attrp ) == 0 ;
1129
1129
zap_cursor_advance (& zc )) {
1130
1130
boolean_t key64 =
1131
1131
!!(zap_getflags (zc .zc_zap ) & ZAP_FLAG_UINT64_KEY );
1132
1132
1133
1133
if (key64 )
1134
1134
(void ) printf ("\t\t0x%010lx = " ,
1135
- * (uint64_t * )attr . za_name );
1135
+ * (uint64_t * )attrp -> za_name );
1136
1136
else
1137
- (void ) printf ("\t\t%s = " , attr . za_name );
1137
+ (void ) printf ("\t\t%s = " , attrp -> za_name );
1138
1138
1139
- if (attr . za_num_integers == 0 ) {
1139
+ if (attrp -> za_num_integers == 0 ) {
1140
1140
(void ) printf ("\n" );
1141
1141
continue ;
1142
1142
}
1143
- prop = umem_zalloc (attr . za_num_integers *
1144
- attr . za_integer_length , UMEM_NOFAIL );
1143
+ prop = umem_zalloc (attrp -> za_num_integers *
1144
+ attrp -> za_integer_length , UMEM_NOFAIL );
1145
1145
1146
1146
if (key64 )
1147
1147
(void ) zap_lookup_uint64 (os , object ,
1148
- (const uint64_t * )attr . za_name , 1 ,
1149
- attr . za_integer_length , attr . za_num_integers ,
1148
+ (const uint64_t * )attrp -> za_name , 1 ,
1149
+ attrp -> za_integer_length , attrp -> za_num_integers ,
1150
1150
prop );
1151
1151
else
1152
- (void ) zap_lookup (os , object , attr . za_name ,
1153
- attr . za_integer_length , attr . za_num_integers ,
1152
+ (void ) zap_lookup (os , object , attrp -> za_name ,
1153
+ attrp -> za_integer_length , attrp -> za_num_integers ,
1154
1154
prop );
1155
1155
1156
- if (attr . za_integer_length == 1 && !key64 ) {
1157
- if (strcmp (attr . za_name ,
1156
+ if (attrp -> za_integer_length == 1 && !key64 ) {
1157
+ if (strcmp (attrp -> za_name ,
1158
1158
DSL_CRYPTO_KEY_MASTER_KEY ) == 0 ||
1159
- strcmp (attr . za_name ,
1159
+ strcmp (attrp -> za_name ,
1160
1160
DSL_CRYPTO_KEY_HMAC_KEY ) == 0 ||
1161
- strcmp (attr .za_name , DSL_CRYPTO_KEY_IV ) == 0 ||
1162
- strcmp (attr .za_name , DSL_CRYPTO_KEY_MAC ) == 0 ||
1163
- strcmp (attr .za_name , DMU_POOL_CHECKSUM_SALT ) == 0 ) {
1161
+ strcmp (attrp -> za_name , DSL_CRYPTO_KEY_IV ) == 0 ||
1162
+ strcmp (attrp -> za_name , DSL_CRYPTO_KEY_MAC ) == 0 ||
1163
+ strcmp (attrp -> za_name ,
1164
+ DMU_POOL_CHECKSUM_SALT ) == 0 ) {
1164
1165
uint8_t * u8 = prop ;
1165
1166
1166
- for (i = 0 ; i < attr . za_num_integers ; i ++ ) {
1167
+ for (i = 0 ; i < attrp -> za_num_integers ; i ++ ) {
1167
1168
(void ) printf ("%02x" , u8 [i ]);
1168
1169
}
1169
1170
} else {
1170
1171
(void ) printf ("%s" , (char * )prop );
1171
1172
}
1172
1173
} else {
1173
- for (i = 0 ; i < attr . za_num_integers ; i ++ ) {
1174
- switch (attr . za_integer_length ) {
1174
+ for (i = 0 ; i < attrp -> za_num_integers ; i ++ ) {
1175
+ switch (attrp -> za_integer_length ) {
1175
1176
case 1 :
1176
1177
(void ) printf ("%u " ,
1177
1178
((uint8_t * )prop )[i ]);
@@ -1192,9 +1193,11 @@ dump_zap(objset_t *os, uint64_t object, void *data, size_t size)
1192
1193
}
1193
1194
}
1194
1195
(void ) printf ("\n" );
1195
- umem_free (prop , attr .za_num_integers * attr .za_integer_length );
1196
+ umem_free (prop ,
1197
+ attrp -> za_num_integers * attrp -> za_integer_length );
1196
1198
}
1197
1199
zap_cursor_fini (& zc );
1200
+ zap_attribute_free (attrp );
1198
1201
}
1199
1202
1200
1203
static void
@@ -1295,72 +1298,74 @@ dump_sa_attrs(objset_t *os, uint64_t object, void *data, size_t size)
1295
1298
{
1296
1299
(void ) data , (void ) size ;
1297
1300
zap_cursor_t zc ;
1298
- zap_attribute_t attr ;
1301
+ zap_attribute_t * attrp = zap_attribute_alloc () ;
1299
1302
1300
1303
dump_zap_stats (os , object );
1301
1304
(void ) printf ("\n" );
1302
1305
1303
1306
for (zap_cursor_init (& zc , os , object );
1304
- zap_cursor_retrieve (& zc , & attr ) == 0 ;
1307
+ zap_cursor_retrieve (& zc , attrp ) == 0 ;
1305
1308
zap_cursor_advance (& zc )) {
1306
- (void ) printf ("\t\t%s = " , attr . za_name );
1307
- if (attr . za_num_integers == 0 ) {
1309
+ (void ) printf ("\t\t%s = " , attrp -> za_name );
1310
+ if (attrp -> za_num_integers == 0 ) {
1308
1311
(void ) printf ("\n" );
1309
1312
continue ;
1310
1313
}
1311
1314
(void ) printf (" %llx : [%d:%d:%d]\n" ,
1312
- (u_longlong_t )attr . za_first_integer ,
1313
- (int )ATTR_LENGTH (attr . za_first_integer ),
1314
- (int )ATTR_BSWAP (attr . za_first_integer ),
1315
- (int )ATTR_NUM (attr . za_first_integer ));
1315
+ (u_longlong_t )attrp -> za_first_integer ,
1316
+ (int )ATTR_LENGTH (attrp -> za_first_integer ),
1317
+ (int )ATTR_BSWAP (attrp -> za_first_integer ),
1318
+ (int )ATTR_NUM (attrp -> za_first_integer ));
1316
1319
}
1317
1320
zap_cursor_fini (& zc );
1321
+ zap_attribute_free (attrp );
1318
1322
}
1319
1323
1320
1324
static void
1321
1325
dump_sa_layouts (objset_t * os , uint64_t object , void * data , size_t size )
1322
1326
{
1323
1327
(void ) data , (void ) size ;
1324
1328
zap_cursor_t zc ;
1325
- zap_attribute_t attr ;
1329
+ zap_attribute_t * attrp = zap_attribute_alloc () ;
1326
1330
uint16_t * layout_attrs ;
1327
1331
unsigned i ;
1328
1332
1329
1333
dump_zap_stats (os , object );
1330
1334
(void ) printf ("\n" );
1331
1335
1332
1336
for (zap_cursor_init (& zc , os , object );
1333
- zap_cursor_retrieve (& zc , & attr ) == 0 ;
1337
+ zap_cursor_retrieve (& zc , attrp ) == 0 ;
1334
1338
zap_cursor_advance (& zc )) {
1335
- (void ) printf ("\t\t%s = [" , attr . za_name );
1336
- if (attr . za_num_integers == 0 ) {
1339
+ (void ) printf ("\t\t%s = [" , attrp -> za_name );
1340
+ if (attrp -> za_num_integers == 0 ) {
1337
1341
(void ) printf ("\n" );
1338
1342
continue ;
1339
1343
}
1340
1344
1341
- VERIFY (attr . za_integer_length == 2 );
1342
- layout_attrs = umem_zalloc (attr . za_num_integers *
1343
- attr . za_integer_length , UMEM_NOFAIL );
1345
+ VERIFY (attrp -> za_integer_length == 2 );
1346
+ layout_attrs = umem_zalloc (attrp -> za_num_integers *
1347
+ attrp -> za_integer_length , UMEM_NOFAIL );
1344
1348
1345
- VERIFY (zap_lookup (os , object , attr . za_name ,
1346
- attr . za_integer_length ,
1347
- attr . za_num_integers , layout_attrs ) == 0 );
1349
+ VERIFY (zap_lookup (os , object , attrp -> za_name ,
1350
+ attrp -> za_integer_length ,
1351
+ attrp -> za_num_integers , layout_attrs ) == 0 );
1348
1352
1349
- for (i = 0 ; i != attr . za_num_integers ; i ++ )
1353
+ for (i = 0 ; i != attrp -> za_num_integers ; i ++ )
1350
1354
(void ) printf (" %d " , (int )layout_attrs [i ]);
1351
1355
(void ) printf ("]\n" );
1352
1356
umem_free (layout_attrs ,
1353
- attr . za_num_integers * attr . za_integer_length );
1357
+ attrp -> za_num_integers * attrp -> za_integer_length );
1354
1358
}
1355
1359
zap_cursor_fini (& zc );
1360
+ zap_attribute_free (attrp );
1356
1361
}
1357
1362
1358
1363
static void
1359
1364
dump_zpldir (objset_t * os , uint64_t object , void * data , size_t size )
1360
1365
{
1361
1366
(void ) data , (void ) size ;
1362
1367
zap_cursor_t zc ;
1363
- zap_attribute_t attr ;
1368
+ zap_attribute_t * attrp = zap_attribute_alloc () ;
1364
1369
const char * typenames [] = {
1365
1370
/* 0 */ "not specified" ,
1366
1371
/* 1 */ "FIFO" ,
@@ -1384,13 +1389,14 @@ dump_zpldir(objset_t *os, uint64_t object, void *data, size_t size)
1384
1389
(void ) printf ("\n" );
1385
1390
1386
1391
for (zap_cursor_init (& zc , os , object );
1387
- zap_cursor_retrieve (& zc , & attr ) == 0 ;
1392
+ zap_cursor_retrieve (& zc , attrp ) == 0 ;
1388
1393
zap_cursor_advance (& zc )) {
1389
1394
(void ) printf ("\t\t%s = %lld (type: %s)\n" ,
1390
- attr . za_name , ZFS_DIRENT_OBJ (attr . za_first_integer ),
1391
- typenames [ZFS_DIRENT_TYPE (attr . za_first_integer )]);
1395
+ attrp -> za_name , ZFS_DIRENT_OBJ (attrp -> za_first_integer ),
1396
+ typenames [ZFS_DIRENT_TYPE (attrp -> za_first_integer )]);
1392
1397
}
1393
1398
zap_cursor_fini (& zc );
1399
+ zap_attribute_free (attrp );
1394
1400
}
1395
1401
1396
1402
static int
@@ -2155,23 +2161,25 @@ dump_brt(spa_t *spa)
2155
2161
continue ;
2156
2162
2157
2163
zap_cursor_t zc ;
2158
- zap_attribute_t za ;
2164
+ zap_attribute_t * za = zap_attribute_alloc () ;
2159
2165
for (zap_cursor_init (& zc , brt -> brt_mos , brtvd -> bv_mos_entries );
2160
- zap_cursor_retrieve (& zc , & za ) == 0 ;
2166
+ zap_cursor_retrieve (& zc , za ) == 0 ;
2161
2167
zap_cursor_advance (& zc )) {
2162
2168
uint64_t refcnt ;
2163
2169
VERIFY0 (zap_lookup_uint64 (brt -> brt_mos ,
2164
2170
brtvd -> bv_mos_entries ,
2165
- (const uint64_t * )za .za_name , 1 ,
2166
- za .za_integer_length , za .za_num_integers , & refcnt ));
2171
+ (const uint64_t * )za -> za_name , 1 ,
2172
+ za -> za_integer_length , za -> za_num_integers ,
2173
+ & refcnt ));
2167
2174
2168
- uint64_t offset = * (const uint64_t * )za . za_name ;
2175
+ uint64_t offset = * (const uint64_t * )za -> za_name ;
2169
2176
2170
2177
snprintf (dva , sizeof (dva ), "%" PRIu64 ":%llx" , vdevid ,
2171
2178
(u_longlong_t )offset );
2172
2179
printf ("%-16s %-10llu\n" , dva , (u_longlong_t )refcnt );
2173
2180
}
2174
2181
zap_cursor_fini (& zc );
2182
+ zap_attribute_free (za );
2175
2183
}
2176
2184
}
2177
2185
@@ -2953,28 +2961,30 @@ static void
2953
2961
dump_bookmarks (objset_t * os , int verbosity )
2954
2962
{
2955
2963
zap_cursor_t zc ;
2956
- zap_attribute_t attr ;
2964
+ zap_attribute_t * attrp ;
2957
2965
dsl_dataset_t * ds = dmu_objset_ds (os );
2958
2966
dsl_pool_t * dp = spa_get_dsl (os -> os_spa );
2959
2967
objset_t * mos = os -> os_spa -> spa_meta_objset ;
2960
2968
if (verbosity < 4 )
2961
2969
return ;
2970
+ attrp = zap_attribute_alloc ();
2962
2971
dsl_pool_config_enter (dp , FTAG );
2963
2972
2964
2973
for (zap_cursor_init (& zc , mos , ds -> ds_bookmarks_obj );
2965
- zap_cursor_retrieve (& zc , & attr ) == 0 ;
2974
+ zap_cursor_retrieve (& zc , attrp ) == 0 ;
2966
2975
zap_cursor_advance (& zc )) {
2967
2976
char osname [ZFS_MAX_DATASET_NAME_LEN ];
2968
2977
char buf [ZFS_MAX_DATASET_NAME_LEN ];
2969
2978
int len ;
2970
2979
dmu_objset_name (os , osname );
2971
2980
len = snprintf (buf , sizeof (buf ), "%s#%s" , osname ,
2972
- attr . za_name );
2981
+ attrp -> za_name );
2973
2982
VERIFY3S (len , < , ZFS_MAX_DATASET_NAME_LEN );
2974
2983
(void ) dump_bookmark (dp , buf , verbosity >= 5 , verbosity >= 6 );
2975
2984
}
2976
2985
zap_cursor_fini (& zc );
2977
2986
dsl_pool_config_exit (dp , FTAG );
2987
+ zap_attribute_free (attrp );
2978
2988
}
2979
2989
2980
2990
static void
@@ -6857,18 +6867,19 @@ iterate_deleted_livelists(spa_t *spa, ll_iter_t func, void *arg)
6857
6867
ASSERT0 (err );
6858
6868
6859
6869
zap_cursor_t zc ;
6860
- zap_attribute_t attr ;
6870
+ zap_attribute_t * attrp = zap_attribute_alloc () ;
6861
6871
dsl_deadlist_t ll ;
6862
6872
/* NULL out os prior to dsl_deadlist_open in case it's garbage */
6863
6873
ll .dl_os = NULL ;
6864
6874
for (zap_cursor_init (& zc , mos , zap_obj );
6865
- zap_cursor_retrieve (& zc , & attr ) == 0 ;
6875
+ zap_cursor_retrieve (& zc , attrp ) == 0 ;
6866
6876
(void ) zap_cursor_advance (& zc )) {
6867
- dsl_deadlist_open (& ll , mos , attr . za_first_integer );
6877
+ dsl_deadlist_open (& ll , mos , attrp -> za_first_integer );
6868
6878
func (& ll , arg );
6869
6879
dsl_deadlist_close (& ll );
6870
6880
}
6871
6881
zap_cursor_fini (& zc );
6882
+ zap_attribute_free (attrp );
6872
6883
}
6873
6884
6874
6885
static int
@@ -8082,13 +8093,14 @@ static void
8082
8093
errorlog_count_refd (objset_t * mos , uint64_t errlog )
8083
8094
{
8084
8095
zap_cursor_t zc ;
8085
- zap_attribute_t za ;
8096
+ zap_attribute_t * za = zap_attribute_alloc () ;
8086
8097
for (zap_cursor_init (& zc , mos , errlog );
8087
- zap_cursor_retrieve (& zc , & za ) == 0 ;
8098
+ zap_cursor_retrieve (& zc , za ) == 0 ;
8088
8099
zap_cursor_advance (& zc )) {
8089
- mos_obj_refd (za . za_first_integer );
8100
+ mos_obj_refd (za -> za_first_integer );
8090
8101
}
8091
8102
zap_cursor_fini (& zc );
8103
+ zap_attribute_free (za );
8092
8104
}
8093
8105
8094
8106
static int
0 commit comments