From 04569c99c0ecdb0f998ed64368edb393425ff329 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Fri, 22 Oct 2021 05:06:09 +0900 Subject: [PATCH] bdev: bdev_io_get_nvme_status() supports NVMe abort command spdk_bdev_io_get_nvme_status() does not follow NVMe abort command about return values. NVMe abort command sets completion status to SUCCESS both for success and failure cases and differentiates only the bit 0 of cdw0. lib/nvmf do not use spdk_bdev_io_get_nvme_status() but checks only success or failure at completion. So there is no issue now but let spdk_bdev_io_get_nvme_status() follow NVMe abort command. In future, the user of spdk_bdev_abort() may use spdk_bdev_io_get_nvme_status(). Signed-off-by: Shuhei Matsumoto Change-Id: Ic4a08056bd8a1aee4c400f72ef5de7c68e23990b Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9977 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Ben Walker Reviewed-by: Konrad Sztyber --- lib/bdev/bdev.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 5274d7acf..4f9db0025 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -5591,6 +5591,17 @@ spdk_bdev_io_get_nvme_status(const struct spdk_bdev_io *bdev_io, uint32_t *cdw0, assert(sc != NULL); assert(cdw0 != NULL); + if (spdk_unlikely(bdev_io->type == SPDK_BDEV_IO_TYPE_ABORT)) { + *sct = SPDK_NVME_SCT_GENERIC; + *sc = SPDK_NVME_SC_SUCCESS; + if (bdev_io->internal.status == SPDK_BDEV_IO_STATUS_SUCCESS) { + *cdw0 = 0; + } else { + *cdw0 = 1U; + } + return; + } + if (bdev_io->internal.status == SPDK_BDEV_IO_STATUS_NVME_ERROR) { *sct = bdev_io->internal.error.nvme.sct; *sc = bdev_io->internal.error.nvme.sc;