From 5aae23aa0878b1d89f2970c7e353ef3e30895989 Mon Sep 17 00:00:00 2001 From: GangCao Date: Tue, 7 Nov 2017 01:30:09 -0500 Subject: [PATCH] test/bdev: handle the error case the IO channel is not setup This issue may be hit under some large IO and large queue depth cases where much memory will be consumed and the channel may be failed to create due to insufficient memory. The general fix here is that we need to properly handle the error case that the channel is not created due to this or that reason. Change-Id: Icf58a7c8a9cba625ef1b8da6b8bf68ef72ef5546 Signed-off-by: GangCao Reviewed-on: https://review.gerrithub.io/386051 Tested-by: SPDK Automated Test System Reviewed-by: Changpeng Liu Reviewed-by: Hailiang Wang Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- test/lib/bdev/bdevperf/bdevperf.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/lib/bdev/bdevperf/bdevperf.c b/test/lib/bdev/bdevperf/bdevperf.c index b8e460fd9..b758352dd 100644 --- a/test/lib/bdev/bdevperf/bdevperf.c +++ b/test/lib/bdev/bdevperf/bdevperf.c @@ -495,6 +495,16 @@ bdevperf_submit_on_core(void *arg1, void *arg2) * completes, another will be submitted. */ while (target != NULL) { target->ch = spdk_bdev_get_io_channel(target->bdev_desc); + if (!target->ch) { + printf("Skip this device (%s) as IO channel not setup.\n", + spdk_bdev_get_name(target->bdev)); + g_target_count--; + g_run_failed = true; + spdk_bdev_close(target->bdev_desc); + + target = target->next; + continue; + } /* Start a timer to stop this I/O chain when the run is over */ target->run_timer = spdk_poller_register(end_target, target,