Lines Matching defs:uring
22 #include "spdk_internal/uring.h"
43 struct io_uring uring;
62 static void uring_free_bdev(struct bdev_uring *uring);
75 .name = "uring",
81 SPDK_BDEV_MODULE_REGISTER(uring, &uring_if)
115 struct bdev_uring *uring;
130 uring = SPDK_CONTAINEROF(bdev, struct bdev_uring, bdev);
131 uring_size = spdk_fd_get_size(uring->fd);
138 uring->filename,
143 SPDK_ERRLOG("Could not change num blocks for uring bdev: name %s, errno: %d.\n",
144 uring->filename, rc);
176 bdev_uring_readv(struct bdev_uring *uring, struct spdk_io_channel *ch,
184 sqe = io_uring_get_sqe(&group_ch->uring);
186 SPDK_DEBUGLOG(uring, "get sqe failed as out of resource\n");
190 io_uring_prep_readv(sqe, uring->fd, iov, iovcnt, offset);
195 SPDK_DEBUGLOG(uring, "read %d iovs size %lu to off: %#lx\n",
203 bdev_uring_writev(struct bdev_uring *uring, struct spdk_io_channel *ch,
211 sqe = io_uring_get_sqe(&group_ch->uring);
213 SPDK_DEBUGLOG(uring, "get sqe failed as out of resource\n");
217 io_uring_prep_writev(sqe, uring->fd, iov, iovcnt, offset);
222 SPDK_DEBUGLOG(uring, "write %d iovs size %lu from off: %#lx\n",
232 struct bdev_uring *uring = ctx;
235 TAILQ_REMOVE(&g_uring_bdev_head, uring, link);
236 rc = bdev_uring_close(uring);
240 spdk_io_device_unregister(uring, NULL);
241 uring_free_bdev(uring);
292 ret = io_uring_submit(&group_ch->uring);
304 count = bdev_uring_reap(&group_ch->uring, to_complete);
413 struct bdev_uring *uring;
418 uring = (struct bdev_uring *)bdev_io->bdev->ctxt;
437 range.sector = (zone_id << uring->zd.lba_shift);
438 range.nr_sectors = (uring->bdev.zone_size << uring->zd.lba_shift);
440 if (ioctl(uring->fd, zone_mgmt_op, &range)) {
454 struct bdev_uring *uring;
463 uring = (struct bdev_uring *)bdev_io->bdev->ctxt;
464 shift = uring->zd.lba_shift;
466 if ((num_zones > uring->zd.num_zones) || !num_zones) {
478 while (num_zones && ((zone_id >> uring->zd.zone_shift) <= num_zones)) {
483 if (ioctl(uring->fd, BLKREPORTZONE, rep)) {
514 bdev_uring_check_zoned_support(struct bdev_uring *uring, const char *name, const char *filename)
525 uring->bdev.zoned = false;
553 uring->bdev.zoned = true;
555 if (ioctl(uring->fd, BLKGETNRZONES, &zinfo)) {
559 uring->zd.num_zones = zinfo;
561 if (ioctl(uring->fd, BLKGETZONESZ, &zinfo)) {
566 uring->zd.lba_shift = uring->bdev.required_alignment - SECTOR_SHIFT;
567 uring->bdev.zone_size = (zinfo >> uring->zd.lba_shift);
568 uring->zd.zone_shift = spdk_u32log2(zinfo >> uring->zd.lba_shift);
575 uring->bdev.max_open_zones = uring->bdev.optimal_open_zones = val;
582 uring->bdev.max_active_zones = val;
607 bdev_uring_check_zoned_support(struct bdev_uring *uring, const char *name, const char *filename)
680 struct bdev_uring *uring = ctx;
682 return spdk_get_io_channel(uring);
688 struct bdev_uring *uring = ctx;
690 spdk_json_write_named_object_begin(w, "uring");
692 spdk_json_write_named_string(w, "filename", uring->filename);
702 struct bdev_uring *uring = bdev->ctxt;
712 spdk_json_write_named_string(w, "filename", uring->filename);
730 uring_free_bdev(struct bdev_uring *uring)
732 if (uring == NULL) {
735 free(uring->filename);
736 free(uring->bdev.name);
737 free(uring);
747 if (io_uring_queue_init(SPDK_URING_QUEUE_DEPTH, &ch->uring, 0) < 0) {
748 SPDK_ERRLOG("uring I/O context setup failure\n");
761 io_uring_queue_exit(&ch->uring);
769 struct bdev_uring *uring;
775 uring = calloc(1, sizeof(*uring));
776 if (!uring) {
777 SPDK_ERRLOG("Unable to allocate enough memory for uring backend\n");
781 uring->filename = strdup(opts->filename);
782 if (!uring->filename) {
786 if (bdev_uring_open(uring)) {
787 SPDK_ERRLOG("Unable to open file %s. fd: %d errno: %d\n", opts->filename, uring->fd, errno);
791 bdev_size = spdk_fd_get_size(uring->fd);
793 uring->bdev.name = strdup(opts->name);
794 if (!uring->bdev.name) {
797 uring->bdev.product_name = "URING bdev";
798 uring->bdev.module = &uring_if;
800 uring->bdev.write_cache = 0;
802 detected_block_size = spdk_fd_get_blocklen(uring->fd);
833 uring->bdev.blocklen = block_size;
834 uring->bdev.required_alignment = spdk_u32log2(block_size);
836 rc = bdev_uring_check_zoned_support(uring, opts->name, opts->filename);
841 if (bdev_size % uring->bdev.blocklen != 0) {
843 bdev_size, uring->bdev.blocklen);
847 uring->bdev.blockcnt = bdev_size / uring->bdev.blocklen;
848 uring->bdev.ctxt = uring;
850 uring->bdev.fn_table = &uring_fn_table;
853 spdk_uuid_copy(&uring->bdev.uuid, &opts->uuid);
856 spdk_io_device_register(uring, bdev_uring_create_cb, bdev_uring_destroy_cb,
858 uring->bdev.name);
859 rc = spdk_bdev_register(&uring->bdev);
861 spdk_io_device_unregister(uring, NULL);
865 TAILQ_INSERT_TAIL(&g_uring_bdev_head, uring, link);
866 return &uring->bdev;
869 bdev_uring_close(uring);
870 uring_free_bdev(uring);
923 SPDK_LOG_REGISTER_COMPONENT(uring)