From 6e640cfcbf0cbb997e538da35d2ed6f82853f3d5 Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Fri, 6 Dec 2019 10:20:20 +0100 Subject: [PATCH] bdev/ocssd: wrap IO part of bdev_ocssd_io Wrap the part of the bdev_ocssd_io responsible for describing IO operations in a separate structure. Currently all fields are wrapped this way, but it'll allow the bdev_ocssd_io to become a union of several different types of structures (one for the IO operations, one for getting zone information, etc.). Change-Id: I72276ce786d3c9ef0d1762c5ac20071b7a163ef5 Signed-off-by: Konrad Sztyber Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/477023 Tested-by: SPDK CI Jenkins Community-CI: Broadcom SPDK FC-NVMe CI Community-CI: SPDK CI Jenkins Reviewed-by: Shuhei Matsumoto Reviewed-by: Wojciech Malikowski Reviewed-by: Tomasz Zawadzki Reviewed-by: Jim Harris --- module/bdev/nvme/bdev_ocssd.c | 52 ++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/module/bdev/nvme/bdev_ocssd.c b/module/bdev/nvme/bdev_ocssd.c index 30ec83775..76f3eff9d 100644 --- a/module/bdev/nvme/bdev_ocssd.c +++ b/module/bdev/nvme/bdev_ocssd.c @@ -52,9 +52,11 @@ struct bdev_ocssd_lba_offsets { }; struct bdev_ocssd_io { - size_t iov_pos; - size_t iov_off; - uint64_t lba[SPDK_NVME_OCSSD_MAX_LBAL_ENTRIES]; + struct { + size_t iov_pos; + size_t iov_off; + uint64_t lba[SPDK_NVME_OCSSD_MAX_LBAL_ENTRIES]; + } io; }; struct ocssd_bdev { @@ -169,13 +171,13 @@ bdev_ocssd_reset_sgl(void *cb_arg, uint32_t offset) struct bdev_ocssd_io *ocdev_io = (struct bdev_ocssd_io *)bdev_io->driver_ctx; struct iovec *iov; - ocdev_io->iov_pos = 0; - ocdev_io->iov_off = 0; + ocdev_io->io.iov_pos = 0; + ocdev_io->io.iov_off = 0; - for (; ocdev_io->iov_pos < (size_t)bdev_io->u.bdev.iovcnt; ++ocdev_io->iov_pos) { - iov = &bdev_io->u.bdev.iovs[ocdev_io->iov_pos]; + for (; ocdev_io->io.iov_pos < (size_t)bdev_io->u.bdev.iovcnt; ++ocdev_io->io.iov_pos) { + iov = &bdev_io->u.bdev.iovs[ocdev_io->io.iov_pos]; if (offset < iov->iov_len) { - ocdev_io->iov_off = offset; + ocdev_io->io.iov_off = offset; return; } @@ -192,21 +194,21 @@ bdev_ocssd_next_sge(void *cb_arg, void **address, uint32_t *length) struct bdev_ocssd_io *ocdev_io = (struct bdev_ocssd_io *)bdev_io->driver_ctx; struct iovec *iov; - assert(ocdev_io->iov_pos < (size_t)bdev_io->u.bdev.iovcnt); - iov = &bdev_io->u.bdev.iovs[ocdev_io->iov_pos]; + assert(ocdev_io->io.iov_pos < (size_t)bdev_io->u.bdev.iovcnt); + iov = &bdev_io->u.bdev.iovs[ocdev_io->io.iov_pos]; *address = iov->iov_base; *length = iov->iov_len; - if (ocdev_io->iov_off != 0) { - assert(ocdev_io->iov_off < iov->iov_len); - *address = (char *)*address + ocdev_io->iov_off; - *length -= ocdev_io->iov_off; + if (ocdev_io->io.iov_off != 0) { + assert(ocdev_io->io.iov_off < iov->iov_len); + *address = (char *)*address + ocdev_io->io.iov_off; + *length -= ocdev_io->io.iov_off; } - assert(ocdev_io->iov_off + *length == iov->iov_len); - ocdev_io->iov_off = 0; - ocdev_io->iov_pos++; + assert(ocdev_io->io.iov_off + *length == iov->iov_len); + ocdev_io->io.iov_off = 0; + ocdev_io->io.iov_pos++; return 0; } @@ -234,8 +236,8 @@ bdev_ocssd_read(struct spdk_io_channel *ioch, struct spdk_bdev_io *bdev_io) return -EINVAL; } - ocdev_io->iov_pos = 0; - ocdev_io->iov_off = 0; + ocdev_io->io.iov_pos = 0; + ocdev_io->io.iov_off = 0; lba = bdev_ocssd_to_disk_lba(ocssd_bdev, bdev_io->u.bdev.offset_blocks); @@ -268,8 +270,8 @@ bdev_ocssd_write(struct spdk_io_channel *ioch, struct spdk_bdev_io *bdev_io) return -EINVAL; } - ocdev_io->iov_pos = 0; - ocdev_io->iov_off = 0; + ocdev_io->io.iov_pos = 0; + ocdev_io->io.iov_off = 0; lba = bdev_ocssd_to_disk_lba(ocssd_bdev, bdev_io->u.bdev.offset_blocks); @@ -323,12 +325,12 @@ bdev_ocssd_reset_zone(struct spdk_io_channel *ioch, struct spdk_bdev_io *bdev_io } for (offset = 0; offset < num_zones; ++offset) { - ocdev_io->lba[offset] = bdev_ocssd_to_disk_lba(ocssd_bdev, - slba + offset * zone_size); + ocdev_io->io.lba[offset] = bdev_ocssd_to_disk_lba(ocssd_bdev, + slba + offset * zone_size); } - return spdk_nvme_ocssd_ns_cmd_vector_reset(nvme_bdev->nvme_ns->ns, nvme_ioch->qpair, ocdev_io->lba, - num_zones, NULL, bdev_ocssd_reset_zone_cb, bdev_io); + return spdk_nvme_ocssd_ns_cmd_vector_reset(nvme_bdev->nvme_ns->ns, nvme_ioch->qpair, + ocdev_io->io.lba, num_zones, NULL, bdev_ocssd_reset_zone_cb, bdev_io); } static int