From 78831c6b35c53f844748e79711b99218fb58f928 Mon Sep 17 00:00:00 2001 From: Minwoo Im Date: Wed, 15 May 2024 14:36:40 +0900 Subject: [PATCH] io_uring: Fix the flip to negative of CQE status Since cqe->res is expected to be a negative value of errno, it's been flipped to a positive value before passing it to io_u.c. However, in case of io_uring_cmd with cmd_type=nvme, cqe->res might represent a NVMe completion status type and code along with control fields such as DNR since nvme_uring_cmd_end_io() in the NVMe driver sets the completion status value and passes it up to io_uring. For example, If a DULBE(Deallocated or Unwritten Logical Block Error) is coming up from the device, cqe->res here would be 0x4287 which is a DULBE error code of media error type. This patch unified the error code to a positive value regardless of the error type. Signed-off-by: Minwoo Im --- engines/io_uring.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engines/io_uring.c b/engines/io_uring.c index 9069fa3e81..56bef9a00a 100644 --- a/engines/io_uring.c +++ b/engines/io_uring.c @@ -476,7 +476,7 @@ static struct io_u *fio_ioring_cmd_event(struct thread_data *td, int event) io_u = (struct io_u *) (uintptr_t) cqe->user_data; if (cqe->res != 0) { - io_u->error = -cqe->res; + io_u->error = abs(cqe->res); return io_u; } else { io_u->error = 0;