Lines Matching defs:delay_node
101 struct vbdev_delay *delay_node = io_device;
103 /* Done with this delay_node. */
104 free(delay_node->delay_bdev.name);
105 free(delay_node);
119 struct vbdev_delay *delay_node = (struct vbdev_delay *)ctx;
125 TAILQ_REMOVE(&g_delay_nodes, delay_node, link);
128 spdk_bdev_module_release_bdev(delay_node->base_bdev);
131 if (delay_node->thread && delay_node->thread != spdk_get_thread()) {
132 spdk_thread_send_msg(delay_node->thread, _vbdev_delay_destruct, delay_node->base_desc);
134 spdk_bdev_close(delay_node->base_desc);
138 spdk_io_device_unregister(delay_node, _device_unregister_cb);
193 struct vbdev_delay *delay_node = SPDK_CONTAINEROF(orig_io->bdev, struct vbdev_delay, delay_bdev);
210 io_ctx->completion_tick = spdk_get_ticks() + delay_node->average_read_latency_ticks;
214 io_ctx->completion_tick = spdk_get_ticks() + delay_node->average_write_latency_ticks;
218 io_ctx->completion_tick = spdk_get_ticks() + delay_node->p99_read_latency_ticks;
222 io_ctx->completion_tick = spdk_get_ticks() + delay_node->p99_write_latency_ticks;
272 struct vbdev_delay *delay_node = SPDK_CONTAINEROF(bdev_io->bdev, struct vbdev_delay,
284 rc = spdk_bdev_readv_blocks_ext(delay_node->base_desc, delay_ch->base_ch, bdev_io->u.bdev.iovs,
304 struct vbdev_delay *delay_node = spdk_io_channel_iter_get_io_device(i);
307 rc = spdk_bdev_reset(delay_node->base_desc, delay_ch->base_ch,
376 vbdev_delay_abort(struct vbdev_delay *delay_node, struct delay_io_channel *delay_ch,
389 return spdk_bdev_abort(delay_node->base_desc, delay_ch->base_ch, bio_to_abort,
396 struct vbdev_delay *delay_node = SPDK_CONTAINEROF(bdev_io->bdev, struct vbdev_delay, delay_bdev);
420 rc = spdk_bdev_writev_blocks_ext(delay_node->base_desc, delay_ch->base_ch, bdev_io->u.bdev.iovs,
426 rc = spdk_bdev_write_zeroes_blocks(delay_node->base_desc, delay_ch->base_ch,
432 rc = spdk_bdev_unmap_blocks(delay_node->base_desc, delay_ch->base_ch,
438 rc = spdk_bdev_flush_blocks(delay_node->base_desc, delay_ch->base_ch,
447 spdk_for_each_channel(delay_node, vbdev_delay_reset_channel, bdev_io,
451 rc = vbdev_delay_abort(delay_node, delay_ch, bdev_io);
460 rc = spdk_bdev_zcopy_start(delay_node->base_desc, delay_ch->base_ch,
489 struct vbdev_delay *delay_node = (struct vbdev_delay *)ctx;
491 return spdk_bdev_io_type_supported(delay_node->base_bdev, io_type);
497 struct vbdev_delay *delay_node = (struct vbdev_delay *)ctx;
500 delay_ch = spdk_get_io_channel(delay_node);
506 _delay_write_conf_values(struct vbdev_delay *delay_node, struct spdk_json_write_ctx *w)
508 struct spdk_uuid *uuid = &delay_node->delay_bdev.uuid;
510 spdk_json_write_named_string(w, "name", spdk_bdev_get_name(&delay_node->delay_bdev));
511 spdk_json_write_named_string(w, "base_bdev_name", spdk_bdev_get_name(delay_node->base_bdev));
516 delay_node->average_read_latency_ticks * SPDK_SEC_TO_USEC / spdk_get_ticks_hz());
518 delay_node->p99_read_latency_ticks * SPDK_SEC_TO_USEC / spdk_get_ticks_hz());
520 delay_node->average_write_latency_ticks * SPDK_SEC_TO_USEC / spdk_get_ticks_hz());
522 delay_node->p99_write_latency_ticks * SPDK_SEC_TO_USEC / spdk_get_ticks_hz());
528 struct vbdev_delay *delay_node = (struct vbdev_delay *)ctx;
532 _delay_write_conf_values(delay_node, w);
542 struct vbdev_delay *delay_node;
544 TAILQ_FOREACH(delay_node, &g_delay_nodes, link) {
548 _delay_write_conf_values(delay_node, w);
565 struct vbdev_delay *delay_node = io_device;
573 delay_ch->base_ch = spdk_bdev_get_io_channel(delay_node->base_desc);
644 struct vbdev_delay *delay_node;
647 TAILQ_FOREACH(delay_node, &g_delay_nodes, link) {
648 if (strcmp(delay_node->delay_bdev.name, delay_name) == 0) {
653 if (delay_node == NULL) {
659 delay_node->average_read_latency_ticks = ticks_mhz * latency_us;
662 delay_node->average_write_latency_ticks = ticks_mhz * latency_us;
665 delay_node->p99_read_latency_ticks = ticks_mhz * latency_us;
668 delay_node->p99_write_latency_ticks = ticks_mhz * latency_us;
712 struct vbdev_delay *delay_node = (struct vbdev_delay *)ctx;
715 return spdk_bdev_get_memory_domains(delay_node->base_bdev, domains, array_size);
732 struct vbdev_delay *delay_node, *tmp;
734 TAILQ_FOREACH_SAFE(delay_node, &g_delay_nodes, link, tmp) {
735 if (bdev_find == delay_node->base_bdev) {
736 spdk_bdev_unregister(&delay_node->delay_bdev, NULL, NULL);
763 struct vbdev_delay *delay_node;
772 * there's a match, create the delay_node & bdev accordingly.
779 delay_node = calloc(1, sizeof(struct vbdev_delay));
780 if (!delay_node) {
782 SPDK_ERRLOG("could not allocate delay_node\n");
785 delay_node->delay_bdev.name = strdup(assoc->vbdev_name);
786 if (!delay_node->delay_bdev.name) {
789 free(delay_node);
792 delay_node->delay_bdev.product_name = "delay";
796 NULL, &delay_node->base_desc);
801 free(delay_node->delay_bdev.name);
802 free(delay_node);
806 bdev = spdk_bdev_desc_get_bdev(delay_node->base_desc);
807 delay_node->base_bdev = bdev;
809 delay_node->delay_bdev.write_cache = bdev->write_cache;
810 delay_node->delay_bdev.required_alignment = bdev->required_alignment;
811 delay_node->delay_bdev.optimal_io_boundary = bdev->optimal_io_boundary;
812 delay_node->delay_bdev.blocklen = bdev->blocklen;
813 delay_node->delay_bdev.blockcnt = bdev->blockcnt;
815 delay_node->delay_bdev.md_interleave = bdev->md_interleave;
816 delay_node->delay_bdev.md_len = bdev->md_len;
817 delay_node->delay_bdev.dif_type = bdev->dif_type;
818 delay_node->delay_bdev.dif_is_head_of_md = bdev->dif_is_head_of_md;
819 delay_node->delay_bdev.dif_check_flags = bdev->dif_check_flags;
820 delay_node->delay_bdev.dif_pi_format = bdev->dif_pi_format;
822 delay_node->delay_bdev.ctxt = delay_node;
823 delay_node->delay_bdev.fn_table = &vbdev_delay_fn_table;
824 delay_node->delay_bdev.module = &delay_if;
827 delay_node->average_read_latency_ticks = ticks_mhz * assoc->avg_read_latency;
828 delay_node->p99_read_latency_ticks = ticks_mhz * assoc->p99_read_latency;
829 delay_node->average_write_latency_ticks = ticks_mhz * assoc->avg_write_latency;
830 delay_node->p99_write_latency_ticks = ticks_mhz * assoc->p99_write_latency;
834 rc = spdk_uuid_generate_sha1(&delay_node->delay_bdev.uuid, &ns_uuid,
837 spdk_bdev_close(delay_node->base_desc);
838 free(delay_node->delay_bdev.name);
839 free(delay_node);
843 spdk_uuid_copy(&delay_node->delay_bdev.uuid, &assoc->uuid);
846 spdk_io_device_register(delay_node, delay_bdev_ch_create_cb, delay_bdev_ch_destroy_cb,
851 delay_node->thread = spdk_get_thread();
853 rc = spdk_bdev_module_claim_bdev(bdev, delay_node->base_desc, delay_node->delay_bdev.module);
859 rc = spdk_bdev_register(&delay_node->delay_bdev);
862 spdk_bdev_module_release_bdev(delay_node->base_bdev);
866 TAILQ_INSERT_TAIL(&g_delay_nodes, delay_node, link);
872 spdk_bdev_close(delay_node->base_desc);
873 spdk_io_device_unregister(delay_node, NULL);
874 free(delay_node->delay_bdev.name);
875 free(delay_node);