Lines Matching defs:bdev_node

110 	struct bdev_zone_block *bdev_node;
113 TAILQ_FOREACH(bdev_node, &g_bdev_nodes, link) {
114 base_bdev = spdk_bdev_desc_get_bdev(bdev_node->base_desc);
119 spdk_json_write_named_string(w, "name", spdk_bdev_get_name(&bdev_node->bdev));
120 spdk_json_write_named_uint64(w, "zone_capacity", bdev_node->zone_capacity);
121 spdk_json_write_named_uint64(w, "optimal_open_zones", bdev_node->bdev.optimal_open_zones);
133 struct bdev_zone_block *bdev_node = io_device;
136 free(bdev_node->bdev.name);
137 for (i = 0; i < bdev_node->num_zones; i++) {
138 pthread_spin_destroy(&bdev_node->zones[i].lock);
140 free(bdev_node->zones);
141 free(bdev_node);
155 struct bdev_zone_block *bdev_node = (struct bdev_zone_block *)ctx;
157 TAILQ_REMOVE(&g_bdev_nodes, bdev_node, link);
160 spdk_bdev_module_release_bdev(spdk_bdev_desc_get_bdev(bdev_node->base_desc));
163 if (bdev_node->thread && bdev_node->thread != spdk_get_thread()) {
164 spdk_thread_send_msg(bdev_node->thread, _zone_block_destruct, bdev_node->base_desc);
166 spdk_bdev_close(bdev_node->base_desc);
170 spdk_io_device_unregister(bdev_node, _device_unregister_cb);
176 zone_block_get_zone_containing_lba(struct bdev_zone_block *bdev_node, uint64_t lba)
178 size_t index = lba >> bdev_node->zone_shift;
180 if (index >= bdev_node->num_zones) {
184 return &bdev_node->zones[index];
188 zone_block_get_zone_by_slba(struct bdev_zone_block *bdev_node, uint64_t start_lba)
190 struct block_zone *zone = zone_block_get_zone_containing_lba(bdev_node, start_lba);
200 zone_block_get_zone_info(struct bdev_zone_block *bdev_node, struct spdk_bdev_io *bdev_io)
210 for (i = 0; i < bdev_io->u.zone_mgmt.num_zones; i++, zone_id += bdev_node->bdev.zone_size) {
211 zone = zone_block_get_zone_by_slba(bdev_node, zone_id);
255 zone_block_reset_zone(struct bdev_zone_block *bdev_node, struct zone_block_io_channel *ch,
273 if (!spdk_bdev_io_type_supported(spdk_bdev_desc_get_bdev(bdev_node->base_desc),
279 return spdk_bdev_unmap_blocks(bdev_node->base_desc, ch->base_ch,
320 zone_block_zone_management(struct bdev_zone_block *bdev_node, struct zone_block_io_channel *ch,
325 zone = zone_block_get_zone_by_slba(bdev_node, bdev_io->u.zone_mgmt.zone_id);
332 return zone_block_reset_zone(bdev_node, ch, zone, bdev_io);
362 zone_block_write(struct bdev_zone_block *bdev_node, struct zone_block_io_channel *ch,
373 zone = zone_block_get_zone_by_slba(bdev_node, lba);
375 zone = zone_block_get_zone_containing_lba(bdev_node, lba);
423 rc = spdk_bdev_writev_blocks_with_md(bdev_node->base_desc, ch->base_ch,
450 zone_block_read(struct bdev_zone_block *bdev_node, struct zone_block_io_channel *ch,
458 zone = zone_block_get_zone_containing_lba(bdev_node, lba);
469 rc = spdk_bdev_readv_blocks_with_md(bdev_node->base_desc, ch->base_ch,
481 struct bdev_zone_block *bdev_node = SPDK_CONTAINEROF(bdev_io->bdev, struct bdev_zone_block, bdev);
487 rc = zone_block_get_zone_info(bdev_node, bdev_io);
490 rc = zone_block_zone_management(bdev_node, dev_ch, bdev_io);
494 rc = zone_block_write(bdev_node, dev_ch, bdev_io);
497 rc = zone_block_read(bdev_node, dev_ch, bdev_io);
533 struct bdev_zone_block *bdev_node = (struct bdev_zone_block *)ctx;
535 return spdk_get_io_channel(bdev_node);
541 struct bdev_zone_block *bdev_node = (struct bdev_zone_block *)ctx;
542 struct spdk_bdev *base_bdev = spdk_bdev_desc_get_bdev(bdev_node->base_desc);
546 spdk_json_write_named_string(w, "name", spdk_bdev_get_name(&bdev_node->bdev));
548 spdk_json_write_named_uint64(w, "zone_capacity", bdev_node->zone_capacity);
549 spdk_json_write_named_uint64(w, "optimal_open_zones", bdev_node->bdev.optimal_open_zones);
567 struct bdev_zone_block *bdev_node, *tmp;
569 TAILQ_FOREACH_SAFE(bdev_node, &g_bdev_nodes, link, tmp) {
570 if (bdev_find == spdk_bdev_desc_get_bdev(bdev_node->base_desc)) {
571 spdk_bdev_unregister(&bdev_node->bdev, NULL, NULL);
594 struct bdev_zone_block *bdev_node = io_device;
596 bdev_ch->base_ch = spdk_bdev_get_io_channel(bdev_node->base_desc);
659 zone_block_init_zone_info(struct bdev_zone_block *bdev_node)
665 for (i = 0; i < bdev_node->num_zones; i++) {
666 zone = &bdev_node->zones[i];
667 zone->zone_info.zone_id = bdev_node->bdev.zone_size * i;
668 zone->zone_info.capacity = bdev_node->zone_capacity;
681 pthread_spin_destroy(&bdev_node->zones[i - 1].lock);
694 struct bdev_zone_block *bdev_node;
702 * there's a match, create the bdev_node & bdev accordingly.
726 bdev_node = calloc(1, sizeof(struct bdev_zone_block));
727 if (!bdev_node) {
729 SPDK_ERRLOG("could not allocate bdev_node\n");
733 bdev_node->base_desc = base_desc;
736 bdev_node->bdev.name = strdup(name->vbdev_name);
737 if (!bdev_node->bdev.name) {
739 SPDK_ERRLOG("could not allocate bdev_node name\n");
750 bdev_node->zone_shift = spdk_u64log2(zone_size);
751 bdev_node->num_zones = base_bdev->blockcnt / zone_size;
753 bdev_node->zones = calloc(bdev_node->num_zones, sizeof(struct block_zone));
754 if (!bdev_node->zones) {
760 bdev_node->bdev.product_name = "zone_block";
763 bdev_node->bdev.write_cache = base_bdev->write_cache;
764 bdev_node->bdev.required_alignment = base_bdev->required_alignment;
765 bdev_node->bdev.optimal_io_boundary = base_bdev->optimal_io_boundary;
767 bdev_node->bdev.blocklen = base_bdev->blocklen;
768 bdev_node->bdev.blockcnt = bdev_node->num_zones * zone_size;
770 if (bdev_node->num_zones * name->zone_capacity != base_bdev->blockcnt) {
773 base_bdev->blockcnt - bdev_node->num_zones * name->zone_capacity);
776 bdev_node->bdev.write_unit_size = base_bdev->write_unit_size;
778 bdev_node->bdev.md_interleave = base_bdev->md_interleave;
779 bdev_node->bdev.md_len = base_bdev->md_len;
780 bdev_node->bdev.dif_type = base_bdev->dif_type;
781 bdev_node->bdev.dif_is_head_of_md = base_bdev->dif_is_head_of_md;
782 bdev_node->bdev.dif_check_flags = base_bdev->dif_check_flags;
783 bdev_node->bdev.dif_pi_format = base_bdev->dif_pi_format;
785 bdev_node->bdev.zoned = true;
786 bdev_node->bdev.ctxt = bdev_node;
787 bdev_node->bdev.fn_table = &zone_block_fn_table;
788 bdev_node->bdev.module = &bdev_zoned_if;
791 rc = spdk_uuid_generate_sha1(&bdev_node->bdev.uuid, &ns_uuid,
799 bdev_node->bdev.zone_size = zone_size;
801 bdev_node->zone_capacity = name->zone_capacity;
802 bdev_node->bdev.optimal_open_zones = name->optimal_open_zones;
803 bdev_node->bdev.max_open_zones = 0;
804 rc = zone_block_init_zone_info(bdev_node);
810 TAILQ_INSERT_TAIL(&g_bdev_nodes, bdev_node, link);
812 spdk_io_device_register(bdev_node, _zone_block_ch_create_cb, _zone_block_ch_destroy_cb,
817 bdev_node->thread = spdk_get_thread();
819 rc = spdk_bdev_module_claim_bdev(base_bdev, base_desc, bdev_node->bdev.module);
825 rc = spdk_bdev_register(&bdev_node->bdev);
835 spdk_bdev_module_release_bdev(&bdev_node->bdev);
837 TAILQ_REMOVE(&g_bdev_nodes, bdev_node, link);
838 spdk_io_device_unregister(bdev_node, NULL);
841 free(bdev_node->zones);
844 free(bdev_node->bdev.name);
846 free(bdev_node);