From f21a34ac26d9fb29fa3b1c9439dfee9725f7245e Mon Sep 17 00:00:00 2001 From: Yifan Bian Date: Thu, 2 Feb 2023 07:10:35 +0000 Subject: [PATCH] perf: add io check for aio device If no aio device exist, then we can use 'exit(1)' to exit. Also, update the same error check with 'exit(1)' for io_uring path. Fix issue with 2893 Signed-off-by: Yifan Bian Change-Id: Iade74fba4588b109ce77af76ac998bb05b842ef3 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16652 Tested-by: SPDK CI Jenkins Reviewed-by: Xiaodong Liu Reviewed-by: Tomasz Zawadzki Reviewed-by: Jim Harris --- examples/nvme/perf/perf.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/examples/nvme/perf/perf.c b/examples/nvme/perf/perf.c index 338691ef2..4eaa8ea63 100644 --- a/examples/nvme/perf/perf.c +++ b/examples/nvme/perf/perf.c @@ -503,8 +503,9 @@ uring_check_io(struct ns_worker_ctx *ns_ctx) assert(ns_ctx->u.uring.cqes[i] != NULL); task = (struct perf_task *)ns_ctx->u.uring.cqes[i]->user_data; if (ns_ctx->u.uring.cqes[i]->res != (int)task->iovs[0].iov_len) { - fprintf(stderr, "cqe[i]->status=%d\n", ns_ctx->u.uring.cqes[i]->res); - exit(0); + fprintf(stderr, "cqe->status=%d, iov_len=%d\n", ns_ctx->u.uring.cqes[i]->res, + (int)task->iovs[0].iov_len); + exit(1); } io_uring_cqe_seen(&ns_ctx->u.uring.ring, ns_ctx->u.uring.cqes[i]); task_complete(task); @@ -615,6 +616,7 @@ aio_check_io(struct ns_worker_ctx *ns_ctx) { int count, i; struct timespec timeout; + struct perf_task *task; timeout.tv_sec = 0; timeout.tv_nsec = 0; @@ -626,6 +628,12 @@ aio_check_io(struct ns_worker_ctx *ns_ctx) } for (i = 0; i < count; i++) { + task = (struct perf_task *)ns_ctx->u.aio.events[i].data; + if (ns_ctx->u.aio.events[i].res != (uint64_t)task->iovs[0].iov_len) { + fprintf(stderr, "event->res=%lu, iov_len=%lu\n", ns_ctx->u.aio.events[i].res, + (uint64_t)task->iovs[0].iov_len); + exit(1); + } task_complete(ns_ctx->u.aio.events[i].data); } return count;