From 05752408b7795e6acb2e422792c30439413a1f0c Mon Sep 17 00:00:00 2001 From: GangCao Date: Fri, 9 Oct 2020 17:20:52 -0400 Subject: [PATCH] test/bdevio: add a shutdown function In the case of handling shutdown signal, a self defined shutdown function is needed to properly handle the cleanup. This is to fix below issue: https://github.com/spdk/spdk/issues/1612 Change-Id: I9e1645980bd4b1340667745eec9ff0f3e7a025c6 Signed-off-by: GangCao Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4569 Reviewed-by: Xiaodong Liu Reviewed-by: Changpeng Liu Reviewed-by: Reviewed-by: Tomasz Zawadzki Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot --- test/bdev/bdevio/bdevio.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test/bdev/bdevio/bdevio.c b/test/bdev/bdevio/bdevio.c index 8ee069e7d..a16fe1660 100644 --- a/test/bdev/bdevio/bdevio.c +++ b/test/bdev/bdevio/bdevio.c @@ -57,6 +57,7 @@ static struct spdk_thread *g_thread_ut; static struct spdk_thread *g_thread_io; static bool g_wait_for_tests = false; static int g_num_failures = 0; +static bool g_shutdown = false; struct io_target { struct spdk_bdev *bdev; @@ -1117,7 +1118,7 @@ __stop_init_thread(void *arg) g_num_failures = 0; bdevio_cleanup_targets(); - if (g_wait_for_tests) { + if (g_wait_for_tests && !g_shutdown) { /* Do not stop the app yet, wait for another RPC */ rpc_perform_tests_cb(num_failures, request); return; @@ -1411,6 +1412,13 @@ invalid: } SPDK_RPC_REGISTER("perform_tests", rpc_perform_tests, SPDK_RPC_RUNTIME) +static void +spdk_bdevio_shutdown_cb(void) +{ + g_shutdown = true; + spdk_thread_send_msg(g_thread_init, __stop_init_thread, NULL); +} + int main(int argc, char **argv) { @@ -1420,6 +1428,7 @@ main(int argc, char **argv) spdk_app_opts_init(&opts); opts.name = "bdevio"; opts.reactor_mask = "0x7"; + opts.shutdown_cb = spdk_bdevio_shutdown_cb; if ((rc = spdk_app_parse_args(argc, argv, &opts, "w", NULL, bdevio_parse_arg, bdevio_usage)) !=