From 05f8643e15c5ead05096fa5476217005ddd19a5c Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Mon, 15 Mar 2021 06:01:40 +0900 Subject: [PATCH] bdev: Correct the bdev_io status to ABORTED when aborted in NVMe bdev module spdk_bdev_io_complete_nvme_status() had set the bdev_io status to NVME_ERROR even if it is aborted, i.e, sc is ABORTED_BY_REQUEST. Fix it to ABORTED, and verify the fix by unit tests. Signed-off-by: Shuhei Matsumoto Change-Id: I6b22547105a6d7986747053f93875854336959b3 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6884 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Changpeng Liu Reviewed-by: Aleksey Marchuk --- lib/bdev/bdev.c | 2 ++ test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 25c8d7dbd..9c741d001 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -5306,6 +5306,8 @@ spdk_bdev_io_complete_nvme_status(struct spdk_bdev_io *bdev_io, uint32_t cdw0, i { if (sct == SPDK_NVME_SCT_GENERIC && sc == SPDK_NVME_SC_SUCCESS) { bdev_io->internal.status = SPDK_BDEV_IO_STATUS_SUCCESS; + } else if (sct == SPDK_NVME_SCT_GENERIC && sc == SPDK_NVME_SC_ABORTED_BY_REQUEST) { + bdev_io->internal.status = SPDK_BDEV_IO_STATUS_ABORTED; } else { bdev_io->internal.status = SPDK_BDEV_IO_STATUS_NVME_ERROR; } diff --git a/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c b/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c index 56c8622a6..749cbd0e5 100644 --- a/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c +++ b/test/unit/lib/bdev/nvme/bdev_nvme.c/bdev_nvme_ut.c @@ -850,6 +850,8 @@ spdk_bdev_io_complete_nvme_status(struct spdk_bdev_io *bdev_io, uint32_t cdw0, i { if (sct == SPDK_NVME_SCT_GENERIC && sc == SPDK_NVME_SC_SUCCESS) { bdev_io->internal.status = SPDK_BDEV_IO_STATUS_SUCCESS; + } else if (sct == SPDK_NVME_SCT_GENERIC && sc == SPDK_NVME_SC_ABORTED_BY_REQUEST) { + bdev_io->internal.status = SPDK_BDEV_IO_STATUS_ABORTED; } else { bdev_io->internal.status = SPDK_BDEV_IO_STATUS_NVME_ERROR; } @@ -1942,7 +1944,7 @@ test_abort(void) CU_ASSERT(abort_io->internal.status == SPDK_BDEV_IO_STATUS_SUCCESS); CU_ASSERT(ctrlr->adminq.num_outstanding_reqs == 0); CU_ASSERT(write_io->internal.in_submit_request == false); - CU_ASSERT(write_io->internal.status == SPDK_BDEV_IO_STATUS_NVME_ERROR); + CU_ASSERT(write_io->internal.status == SPDK_BDEV_IO_STATUS_ABORTED); CU_ASSERT(nvme_ch->qpair->num_outstanding_reqs == 0); /* Aborting the admin request should succeed. */ @@ -1964,7 +1966,7 @@ test_abort(void) CU_ASSERT(abort_io->internal.status == SPDK_BDEV_IO_STATUS_SUCCESS); CU_ASSERT(ctrlr->adminq.num_outstanding_reqs == 0); CU_ASSERT(admin_io->internal.in_submit_request == false); - CU_ASSERT(admin_io->internal.status == SPDK_BDEV_IO_STATUS_NVME_ERROR); + CU_ASSERT(admin_io->internal.status == SPDK_BDEV_IO_STATUS_ABORTED); CU_ASSERT(ctrlr->adminq.num_outstanding_reqs == 0); spdk_put_io_channel(ch);