bdevperf: save bdev io type in bdevperf_task

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: Ia32bd2655a4cc1c082ce5fd5420f6abaabe40133

Reviewed-on: https://review.gerrithub.io/415299
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Jim Harris 2018-06-14 02:03:52 -07:00 committed by Daniel Verkamp
parent 7717cfcacc
commit 67bc354c37

View File

@ -49,6 +49,7 @@ struct bdevperf_task {
struct io_target *target; struct io_target *target;
void *buf; void *buf;
uint64_t offset_blocks; uint64_t offset_blocks;
enum spdk_bdev_io_type io_type;
TAILQ_ENTRY(bdevperf_task) link; TAILQ_ENTRY(bdevperf_task) link;
}; };
@ -356,6 +357,7 @@ static __thread unsigned int seed = 0;
static void static void
bdevperf_submit_single(struct io_target *target, struct bdevperf_task *task) 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_bdev_desc *desc;
struct spdk_io_channel *ch; struct spdk_io_channel *ch;
uint64_t offset_in_ios; 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); memset(task->buf, rand_r(&seed) % 256, g_io_size);
task->iov.iov_base = task->buf; task->iov.iov_base = task->buf;
task->iov.iov_len = g_io_size; task->iov.iov_len = g_io_size;
rc = spdk_bdev_writev_blocks(desc, ch, &task->iov, 1, task->offset_blocks, task->io_type = SPDK_BDEV_IO_TYPE_WRITE;
target->io_size_blocks, bdevperf_verify_write_complete, task);
} else if (g_flush) { } else if (g_flush) {
rc = spdk_bdev_flush_blocks(desc, ch, task->offset_blocks, task->io_type = SPDK_BDEV_IO_TYPE_FLUSH;
target->io_size_blocks, bdevperf_complete, task);
} else if (g_unmap) { } else if (g_unmap) {
rc = spdk_bdev_unmap_blocks(desc, ch, task->offset_blocks, task->io_type = SPDK_BDEV_IO_TYPE_UNMAP;
target->io_size_blocks, bdevperf_complete, task);
} else if ((g_rw_percentage == 100) || } else if ((g_rw_percentage == 100) ||
(g_rw_percentage != 0 && ((rand_r(&seed) % 100) < g_rw_percentage))) { (g_rw_percentage != 0 && ((rand_r(&seed) % 100) < g_rw_percentage))) {
rbuf = g_zcopy ? NULL : task->buf; task->io_type = SPDK_BDEV_IO_TYPE_READ;
rc = spdk_bdev_read_blocks(desc, ch, rbuf, task->offset_blocks,
target->io_size_blocks, bdevperf_complete, task);
} else { } else {
task->iov.iov_base = task->buf; task->iov.iov_base = task->buf;
task->iov.iov_len = g_io_size; 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, 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) { if (rc) {