spa_keystore
rw_enter(&spa->spa_keystore.sk_km_lock, RW_WRITER);
found_km = avl_find(&spa->spa_keystore.sk_key_mappings, km, &where);
avl_insert(&spa->spa_keystore.sk_key_mappings, km, where);
rw_exit(&spa->spa_keystore.sk_km_lock);
rw_enter(&spa->spa_keystore.sk_km_lock, RW_READER);
found_km = avl_find(&spa->spa_keystore.sk_key_mappings,
rw_exit(&spa->spa_keystore.sk_km_lock);
rw_exit(&spa->spa_keystore.sk_km_lock);
rw_enter(&spa->spa_keystore.sk_km_lock, RW_READER);
found_km = avl_find(&spa->spa_keystore.sk_key_mappings, &search_km,
rw_exit(&spa->spa_keystore.sk_km_lock);
rw_exit(&spa->spa_keystore.sk_km_lock);
ASSERT(RW_WRITE_HELD(&dp->dp_spa->spa_keystore.sk_wkeys_lock));
rw_enter(&spa->spa_keystore.sk_wkeys_lock, RW_WRITER);
found_wkey = avl_find(&spa->spa_keystore.sk_wkeys, &wkey_search, NULL);
avl_remove(&spa->spa_keystore.sk_wkeys, found_wkey);
(void) avl_find(&spa->spa_keystore.sk_wkeys, wkey, &where);
avl_insert(&spa->spa_keystore.sk_wkeys, wkey, where);
rw_exit(&spa->spa_keystore.sk_wkeys_lock);
rw_enter(&dp->dp_spa->spa_keystore.sk_wkeys_lock, RW_WRITER);
rw_exit(&dp->dp_spa->spa_keystore.sk_wkeys_lock);
ASSERT(RW_LOCK_HELD(&spa->spa_keystore.sk_wkeys_lock));
found_wkey = avl_find(&spa->spa_keystore.sk_wkeys, &search_wkey, NULL);
if (!RW_WRITE_HELD(&spa->spa_keystore.sk_wkeys_lock)) {
rw_enter(&spa->spa_keystore.sk_wkeys_lock, RW_READER);
rw_exit(&spa->spa_keystore.sk_wkeys_lock);
rw_exit(&spa->spa_keystore.sk_wkeys_lock);
ASSERT(RW_LOCK_HELD(&spa->spa_keystore.sk_dk_lock));
found_dck = avl_find(&spa->spa_keystore.sk_dsl_keys, &search_dck, NULL);
rw_enter(&spa->spa_keystore.sk_dk_lock, RW_READER);
rw_exit(&spa->spa_keystore.sk_dk_lock);
rw_enter(&spa->spa_keystore.sk_dk_lock, RW_WRITER);
(void) avl_find(&spa->spa_keystore.sk_dsl_keys, dck_io, &where);
avl_insert(&spa->spa_keystore.sk_dsl_keys, dck_io, where);
rw_exit(&spa->spa_keystore.sk_dk_lock);
rw_enter(&spa->spa_keystore.sk_dk_lock, RW_WRITER);
avl_remove(&spa->spa_keystore.sk_dsl_keys, dck);
rw_exit(&spa->spa_keystore.sk_dk_lock);
rw_enter(&spa->spa_keystore.sk_wkeys_lock, RW_WRITER);
found_wkey = avl_find(&spa->spa_keystore.sk_wkeys, wkey, &where);
avl_insert(&spa->spa_keystore.sk_wkeys, wkey, where);
rw_exit(&spa->spa_keystore.sk_wkeys_lock);
rw_exit(&spa->spa_keystore.sk_wkeys_lock);
rw_enter(&spa->spa_keystore.sk_wkeys_lock, RW_WRITER);
found_wkey = avl_find(&spa->spa_keystore.sk_wkeys,
avl_remove(&spa->spa_keystore.sk_wkeys, found_wkey);
rw_exit(&spa->spa_keystore.sk_wkeys_lock);
rw_exit(&spa->spa_keystore.sk_wkeys_lock);
rw_enter(&spa->spa_keystore.sk_km_lock, RW_WRITER);
rw_exit(&spa->spa_keystore.sk_km_lock);
avl_remove(&spa->spa_keystore.sk_key_mappings, km);
rw_exit(&spa->spa_keystore.sk_km_lock);
spa_keystore_init(&spa->spa_keystore);
spa_keystore_fini(&spa->spa_keystore);
spa_keystore_t spa_keystore; /* loaded crypto keys */