bdevperf: Change g_run_failed to g_run_rc and use it correctly

Change bool g_run_failed to int g_run_rc.  If any error is detected
during bdevperf running, negative return code is directly set to
g_run_rc. Then g_run_rc is passed to rpc_perform_tests_cb() or
bdevperf_fini().

Besides, we had updated g_run_failed even after spdk_app_start()
returned.  However return code of spdk_app_start() might not be of
bdevperf_run().  Hence change main() to return the return code of
spdk_app_start() simply without updating g_run_failed.

Additionally, even if g_target_count becomes zero in
spdk_bdevperf_shutdown_cb(), g_run_rc may indicate error.  So,
change spdk_bdevperf_shutdown_cb() to pass g_run_rc to
bdevperf_fini().

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Ia85680679087c3106ba687d7e58027ae8ff4a5c7
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/478833
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
Shuhei Matsumoto 2019-12-25 19:50:50 -05:00 committed by Tomasz Zawadzki
parent 5412468f87
commit 801e76d8bf

View File

@ -74,7 +74,7 @@ static int g_show_performance_real_time = 0;
static uint64_t g_show_performance_period_in_usec = 1000000; static uint64_t g_show_performance_period_in_usec = 1000000;
static uint64_t g_show_performance_period_num = 0; static uint64_t g_show_performance_period_num = 0;
static uint64_t g_show_performance_ema_period = 0; static uint64_t g_show_performance_ema_period = 0;
static bool g_run_failed = false; static int g_run_rc = 0;
static bool g_shutdown = false; static bool g_shutdown = false;
static uint64_t g_shutdown_tsc; static uint64_t g_shutdown_tsc;
static bool g_zcopy = true; static bool g_zcopy = true;
@ -449,7 +449,6 @@ static void
end_run(void *arg1, void *arg2) end_run(void *arg1, void *arg2)
{ {
struct io_target *target = arg1; struct io_target *target = arg1;
int rc = 0;
spdk_bdev_close(target->bdev_desc); spdk_bdev_close(target->bdev_desc);
if (--g_target_count == 0) { if (--g_target_count == 0) {
@ -463,21 +462,17 @@ end_run(void *arg1, void *arg2)
} }
if (g_time_in_usec) { if (g_time_in_usec) {
if (!g_run_failed) { if (!g_run_rc) {
performance_dump(g_time_in_usec, 0); performance_dump(g_time_in_usec, 0);
} }
} else { } else {
printf("Test time less than one microsecond, no performance data will be shown\n"); printf("Test time less than one microsecond, no performance data will be shown\n");
} }
if (g_run_failed) {
rc = -1;
}
if (g_request && !g_shutdown) { if (g_request && !g_shutdown) {
rpc_perform_tests_cb(rc); rpc_perform_tests_cb(g_run_rc);
} else { } else {
bdevperf_fini(rc); bdevperf_fini(g_run_rc);
} }
} }
} }
@ -509,7 +504,7 @@ bdevperf_complete(struct spdk_bdev_io *bdev_io, bool success, void *cb_arg)
if (!success) { if (!success) {
if (!g_reset && !g_continue_on_failure) { if (!g_reset && !g_continue_on_failure) {
target->is_draining = true; target->is_draining = true;
g_run_failed = true; g_run_rc = -1;
printf("task offset: %lu on target bdev=%s fails\n", printf("task offset: %lu on target bdev=%s fails\n",
task->offset_blocks, target->name); task->offset_blocks, target->name);
} }
@ -524,7 +519,7 @@ bdevperf_complete(struct spdk_bdev_io *bdev_io, bool success, void *cb_arg)
target->io_size_blocks, md_check)) { target->io_size_blocks, md_check)) {
printf("Buffer mismatch! Disk Offset: %lu\n", task->offset_blocks); printf("Buffer mismatch! Disk Offset: %lu\n", task->offset_blocks);
target->is_draining = true; target->is_draining = true;
g_run_failed = true; g_run_rc = -1;
} }
} }
@ -579,7 +574,7 @@ bdevperf_verify_submit_read(void *cb_arg)
} else if (rc != 0) { } else if (rc != 0) {
printf("Failed to submit read: %d\n", rc); printf("Failed to submit read: %d\n", rc);
target->is_draining = true; target->is_draining = true;
g_run_failed = true; g_run_rc = rc;
} }
} }
@ -725,7 +720,7 @@ bdevperf_submit_task(void *arg)
} else if (rc != 0) { } else if (rc != 0) {
printf("Failed to submit bdev_io: %d\n", rc); printf("Failed to submit bdev_io: %d\n", rc);
target->is_draining = true; target->is_draining = true;
g_run_failed = true; g_run_rc = rc;
return; return;
} }
@ -742,7 +737,7 @@ bdevperf_zcopy_get_buf_complete(struct spdk_bdev_io *bdev_io, bool success, void
if (!success) { if (!success) {
target->is_draining = true; target->is_draining = true;
g_run_failed = true; g_run_rc = -1;
return; return;
} }
@ -893,7 +888,7 @@ reset_cb(struct spdk_bdev_io *bdev_io, bool success, void *cb_arg)
if (!success) { if (!success) {
printf("Reset blockdev=%s failed\n", spdk_bdev_get_name(target->bdev)); printf("Reset blockdev=%s failed\n", spdk_bdev_get_name(target->bdev));
target->is_draining = true; target->is_draining = true;
g_run_failed = true; g_run_rc = -1;
} }
TAILQ_INSERT_TAIL(&target->task_list, task, link); TAILQ_INSERT_TAIL(&target->task_list, task, link);
@ -919,7 +914,7 @@ reset_target(void *arg)
if (rc) { if (rc) {
printf("Reset failed: %d\n", rc); printf("Reset failed: %d\n", rc);
target->is_draining = true; target->is_draining = true;
g_run_failed = true; g_run_rc = -1;
} }
return -1; return -1;
@ -939,7 +934,7 @@ bdevperf_submit_on_core(void *arg1, void *arg2)
printf("Skip this device (%s) as IO channel not setup.\n", printf("Skip this device (%s) as IO channel not setup.\n",
spdk_bdev_get_name(target->bdev)); spdk_bdev_get_name(target->bdev));
g_target_count--; g_target_count--;
g_run_failed = true; g_run_rc = -1;
spdk_bdev_close(target->bdev_desc); spdk_bdev_close(target->bdev_desc);
continue; continue;
} }
@ -1349,7 +1344,7 @@ spdk_bdevperf_shutdown_cb(void)
g_shutdown = true; g_shutdown = true;
if (g_target_count == 0) { if (g_target_count == 0) {
bdevperf_fini(0); bdevperf_fini(g_run_rc);
return; return;
} }
@ -1500,10 +1495,7 @@ main(int argc, char **argv)
} }
rc = spdk_app_start(&opts, bdevperf_run, NULL); rc = spdk_app_start(&opts, bdevperf_run, NULL);
if (rc) {
g_run_failed = true;
}
spdk_app_fini(); spdk_app_fini();
return g_run_failed; return rc;
} }