bdevperf: exit with non-zero status code if any I/O fails

Also stop submitting new I/O for any target that reports
an I/O failure by setting its is_draining flag when the I/O
failure is detected.

Signed-off-by: Jim Harris <james.r.harris@intel.com>
Change-Id: I89c9d19b22a164caf5aef20d63b509d33b7aeef7
This commit is contained in:
Jim Harris 2016-10-11 08:34:53 -07:00 committed by Ben Walker
parent 1a37acda67
commit 534256097b

View File

@ -172,9 +172,13 @@ end_run(spdk_event_t event)
if (g_show_performance_real_time) {
spdk_poller_unregister(&g_perf_timer, NULL);
}
if (g_run_failed) {
spdk_app_stop(1);
} else {
spdk_app_stop(0);
}
}
}
struct rte_mempool *task_pool;
@ -186,17 +190,20 @@ bdevperf_complete(spdk_event_t event)
struct spdk_bdev_io *bdev_io = spdk_event_get_arg2(event);
spdk_event_t complete;
target = task->target;
if (bdev_io->status != SPDK_BDEV_IO_STATUS_SUCCESS) {
target->is_draining = true;
g_run_failed = true;
} else if (g_verify || g_reset || g_unmap) {
assert(bdev_io->u.read.iovcnt == 1);
if (memcmp(task->buf, bdev_io->u.read.iov.iov_base, g_io_size) != 0) {
printf("Buffer mismatch! Disk Offset: %lu\n", bdev_io->u.read.offset);
target->is_draining = true;
g_run_failed = true;
}
}
target = task->target;
target->current_queue_depth--;
target->io_completed++;
@ -368,6 +375,7 @@ reset_cb(spdk_event_t event)
if (status != SPDK_BDEV_IO_STATUS_SUCCESS) {
printf("Reset blockdev=%s failed\n", target->bdev->name);
target->is_draining = true;
g_run_failed = true;
}