From 67bc354c378e7ec2fdf32280126f82947a5430ac Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Thu, 14 Jun 2018 02:03:52 -0700 Subject: [PATCH] bdevperf: save bdev io type in bdevperf_task Signed-off-by: Jim Harris Change-Id: Ia32bd2655a4cc1c082ce5fd5420f6abaabe40133 Reviewed-on: https://review.gerrithub.io/415299 Tested-by: SPDK Automated Test System Reviewed-by: Daniel Verkamp Reviewed-by: Ben Walker --- test/bdev/bdevperf/bdevperf.c | 41 ++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/test/bdev/bdevperf/bdevperf.c b/test/bdev/bdevperf/bdevperf.c index 4a5e8571f..9ea518f5e 100644 --- a/test/bdev/bdevperf/bdevperf.c +++ b/test/bdev/bdevperf/bdevperf.c @@ -49,6 +49,7 @@ struct bdevperf_task { struct io_target *target; void *buf; uint64_t offset_blocks; + enum spdk_bdev_io_type io_type; TAILQ_ENTRY(bdevperf_task) link; }; @@ -356,6 +357,7 @@ static __thread unsigned int seed = 0; static void bdevperf_submit_single(struct io_target *target, struct bdevperf_task *task) { + spdk_bdev_io_completion_cb cb_fn; struct spdk_bdev_desc *desc; struct spdk_io_channel *ch; uint64_t offset_in_ios; @@ -389,24 +391,43 @@ bdevperf_submit_single(struct io_target *target, struct bdevperf_task *task) memset(task->buf, rand_r(&seed) % 256, g_io_size); task->iov.iov_base = task->buf; task->iov.iov_len = g_io_size; - rc = spdk_bdev_writev_blocks(desc, ch, &task->iov, 1, task->offset_blocks, - target->io_size_blocks, bdevperf_verify_write_complete, task); + task->io_type = SPDK_BDEV_IO_TYPE_WRITE; } else if (g_flush) { - rc = spdk_bdev_flush_blocks(desc, ch, task->offset_blocks, - target->io_size_blocks, bdevperf_complete, task); + task->io_type = SPDK_BDEV_IO_TYPE_FLUSH; } else if (g_unmap) { - rc = spdk_bdev_unmap_blocks(desc, ch, task->offset_blocks, - target->io_size_blocks, bdevperf_complete, task); + task->io_type = SPDK_BDEV_IO_TYPE_UNMAP; } else if ((g_rw_percentage == 100) || (g_rw_percentage != 0 && ((rand_r(&seed) % 100) < g_rw_percentage))) { - rbuf = g_zcopy ? NULL : task->buf; - rc = spdk_bdev_read_blocks(desc, ch, rbuf, task->offset_blocks, - target->io_size_blocks, bdevperf_complete, task); + task->io_type = SPDK_BDEV_IO_TYPE_READ; } else { task->iov.iov_base = task->buf; task->iov.iov_len = g_io_size; + task->io_type = SPDK_BDEV_IO_TYPE_WRITE; + } + + switch (task->io_type) { + case SPDK_BDEV_IO_TYPE_WRITE: + cb_fn = (g_verify || g_reset) ? bdevperf_verify_write_complete : bdevperf_complete; rc = spdk_bdev_writev_blocks(desc, ch, &task->iov, 1, task->offset_blocks, - target->io_size_blocks, bdevperf_complete, task); + target->io_size_blocks, cb_fn, task); + break; + case SPDK_BDEV_IO_TYPE_FLUSH: + rc = spdk_bdev_flush_blocks(desc, ch, task->offset_blocks, + target->io_size_blocks, bdevperf_complete, task); + break; + case SPDK_BDEV_IO_TYPE_UNMAP: + rc = spdk_bdev_unmap_blocks(desc, ch, task->offset_blocks, + target->io_size_blocks, bdevperf_complete, task); + break; + case SPDK_BDEV_IO_TYPE_READ: + rbuf = g_zcopy ? NULL : task->buf; + rc = spdk_bdev_read_blocks(desc, ch, rbuf, task->offset_blocks, + target->io_size_blocks, bdevperf_complete, task); + break; + default: + assert(false); + rc = -EINVAL; + break; } if (rc) {