static void trim_map_vdev_commit_done(spa_t *spa, vdev_t *vd) { trim_map_t *tm = vd->vdev_trimmap; trim_seg_t *ts; list_t pending_writes; zio_t *zio; uint64_t start, size; void *cookie; ASSERT(vd->vdev_ops->vdev_op_leaf); if (tm == NULL) return; mutex_enter(&tm->tm_lock); if (!avl_is_empty(&tm->tm_inflight_frees)) { cookie = NULL; while ((ts = avl_destroy_nodes(&tm->tm_inflight_frees, &cookie)) != NULL) { kmem_free(ts, sizeof (*ts)); } } list_create(&pending_writes, sizeof (zio_t), offsetof(zio_t, io_trim_link)); list_move_tail(&pending_writes, &tm->tm_pending_writes); mutex_exit(&tm->tm_lock); while ((zio = list_remove_head(&pending_writes)) != NULL) { zio_vdev_io_reissue(zio); zio_execute(zio); } list_destroy(&pending_writes); }
static void rrdns_handle_response(struct uloop_fd *ufd, unsigned int ev) { struct rrdns_context *rctx = container_of(ufd, struct rrdns_context, socket); int err = rrdns_parse_response(rctx); if (err != -ENODATA && err != -ENOENT) rrdns_next_query(rctx); if (avl_is_empty(&rctx->request_ids)) rdns_shutdown(rctx); }
zcrypt_keystore_node_t * zcrypt_keystore_find_node(spa_t *spa, uint64_t dsobj, boolean_t config_rwlock_held) { zcrypt_keystore_node_t search; zcrypt_keystore_node_t *found = NULL; rw_enter(&spa->spa_keystore->sk_lock, RW_READER); if (avl_is_empty(&spa->spa_keystore->sk_dslkeys)) goto out; search.skn_os = dsobj; found = avl_find(&spa->spa_keystore->sk_dslkeys, &search, NULL); if (found == NULL) { int error; dsl_pool_t *dp = spa_get_dsl(spa); dsl_dataset_t *ds; boolean_t need_lock; rw_exit(&spa->spa_keystore->sk_lock); need_lock = !dsl_pool_sync_context(dp) && !config_rwlock_held; if (need_lock) rw_enter(&dp->dp_config_rwlock, RW_READER); error = dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds); if (need_lock) rw_exit(&dp->dp_config_rwlock); rw_enter(&spa->spa_keystore->sk_lock, RW_READER); if (!error) { if (dsl_dataset_is_snapshot(ds)) { search.skn_os = ds->ds_dir->dd_phys->dd_head_dataset_obj; found = avl_find(&spa->spa_keystore->sk_dslkeys, &search, NULL); } dsl_dataset_rele(ds, FTAG); } } out: rw_exit(&spa->spa_keystore->sk_lock); return (found); }