Commit 53425609 authored by Jim Harris's avatar Jim Harris Committed by Ben Walker
Browse files

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: default avatarJim Harris <james.r.harris@intel.com>
Change-Id: I89c9d19b22a164caf5aef20d63b509d33b7aeef7
parent 1a37acda
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -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;
	}