@@ -1227,6 +1227,21 @@ zap_lookup_norm_by_dnode(dnode_t *dn, const char *name,
1227
1227
return (err );
1228
1228
}
1229
1229
1230
+ static int
1231
+ zap_prefetch_uint64_impl (zap_t * zap , const uint64_t * key , int key_numints )
1232
+ {
1233
+ zap_name_t * zn = zap_name_alloc_uint64 (zap , key , key_numints );
1234
+ if (zn == NULL ) {
1235
+ zap_unlockdir (zap , FTAG );
1236
+ return (SET_ERROR (ENOTSUP ));
1237
+ }
1238
+
1239
+ fzap_prefetch (zn );
1240
+ zap_name_free (zn );
1241
+ zap_unlockdir (zap , FTAG );
1242
+ return (0 );
1243
+ }
1244
+
1230
1245
int
1231
1246
zap_prefetch_uint64 (objset_t * os , uint64_t zapobj , const uint64_t * key ,
1232
1247
int key_numints )
@@ -1237,13 +1252,37 @@ zap_prefetch_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key,
1237
1252
zap_lockdir (os , zapobj , NULL , RW_READER , TRUE, FALSE, FTAG , & zap );
1238
1253
if (err != 0 )
1239
1254
return (err );
1255
+ err = zap_prefetch_uint64_impl (zap , key , key_numints );
1256
+ /* zap_prefetch_uint64_impl() calls zap_unlockdir() */
1257
+ return (err );
1258
+ }
1259
+
1260
+ int
1261
+ zap_prefetch_uint64_by_dnode (dnode_t * dn , const uint64_t * key , int key_numints )
1262
+ {
1263
+ zap_t * zap ;
1264
+
1265
+ int err =
1266
+ zap_lockdir_by_dnode (dn , NULL , RW_READER , TRUE, FALSE, FTAG , & zap );
1267
+ if (err != 0 )
1268
+ return (err );
1269
+ err = zap_prefetch_uint64_impl (zap , key , key_numints );
1270
+ /* zap_prefetch_uint64_impl() calls zap_unlockdir() */
1271
+ return (err );
1272
+ }
1273
+
1274
+ static int
1275
+ zap_lookup_uint64_impl (zap_t * zap , const uint64_t * key ,
1276
+ int key_numints , uint64_t integer_size , uint64_t num_integers , void * buf )
1277
+ {
1240
1278
zap_name_t * zn = zap_name_alloc_uint64 (zap , key , key_numints );
1241
1279
if (zn == NULL ) {
1242
1280
zap_unlockdir (zap , FTAG );
1243
1281
return (SET_ERROR (ENOTSUP ));
1244
1282
}
1245
1283
1246
- fzap_prefetch (zn );
1284
+ int err = fzap_lookup (zn , integer_size , num_integers , buf ,
1285
+ NULL , 0 , NULL );
1247
1286
zap_name_free (zn );
1248
1287
zap_unlockdir (zap , FTAG );
1249
1288
return (err );
@@ -1259,16 +1298,25 @@ zap_lookup_uint64(objset_t *os, uint64_t zapobj, const uint64_t *key,
1259
1298
zap_lockdir (os , zapobj , NULL , RW_READER , TRUE, FALSE, FTAG , & zap );
1260
1299
if (err != 0 )
1261
1300
return (err );
1262
- zap_name_t * zn = zap_name_alloc_uint64 (zap , key , key_numints );
1263
- if ( zn == NULL ) {
1264
- zap_unlockdir ( zap , FTAG );
1265
- return (SET_ERROR ( ENOTSUP ) );
1266
- }
1301
+ err = zap_lookup_uint64_impl (zap , key , key_numints , integer_size ,
1302
+ num_integers , buf );
1303
+ /* zap_lookup_uint64_impl() calls zap_unlockdir() */
1304
+ return (err );
1305
+ }
1267
1306
1268
- err = fzap_lookup (zn , integer_size , num_integers , buf ,
1269
- NULL , 0 , NULL );
1270
- zap_name_free (zn );
1271
- zap_unlockdir (zap , FTAG );
1307
+ int
1308
+ zap_lookup_uint64_by_dnode (dnode_t * dn , const uint64_t * key ,
1309
+ int key_numints , uint64_t integer_size , uint64_t num_integers , void * buf )
1310
+ {
1311
+ zap_t * zap ;
1312
+
1313
+ int err =
1314
+ zap_lockdir_by_dnode (dn , NULL , RW_READER , TRUE, FALSE, FTAG , & zap );
1315
+ if (err != 0 )
1316
+ return (err );
1317
+ err = zap_lookup_uint64_impl (zap , key , key_numints , integer_size ,
1318
+ num_integers , buf );
1319
+ /* zap_lookup_uint64_impl() calls zap_unlockdir() */
1272
1320
return (err );
1273
1321
}
1274
1322
0 commit comments