From 82c61e0678d8aef9f51a276f32f5b4196f494dfa Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Thu, 16 Feb 2023 02:17:54 +0530 Subject: [PATCH] lib/nvme: 0 based numd for reservation report Fix for number of dwords which is 0 based as per spec. Use bitwise operators instead of division and modulus. Change-Id: Ib315bf9394ef599317f41429742e7b8054069549 Signed-off-by: Ankit Kumar Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16814 Tested-by: SPDK CI Jenkins Reviewed-by: Tomasz Zawadzki Reviewed-by: Jim Harris --- lib/nvme/nvme_ns_cmd.c | 6 +++--- test/unit/lib/nvme/nvme_ns_cmd.c/nvme_ns_cmd_ut.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/nvme/nvme_ns_cmd.c b/lib/nvme/nvme_ns_cmd.c index ec2e70b2a..fde7f6491 100644 --- a/lib/nvme/nvme_ns_cmd.c +++ b/lib/nvme/nvme_ns_cmd.c @@ -1338,10 +1338,9 @@ spdk_nvme_ns_cmd_reservation_report(struct spdk_nvme_ns *ns, struct nvme_request *req; struct spdk_nvme_cmd *cmd; - if (len % 4) { + if (len & 0x3) { return -EINVAL; } - num_dwords = len / 4; req = nvme_allocate_request_user_copy(qpair, payload, len, cb_fn, cb_arg, false); if (req == NULL) { @@ -1352,7 +1351,8 @@ spdk_nvme_ns_cmd_reservation_report(struct spdk_nvme_ns *ns, cmd->opc = SPDK_NVME_OPC_RESERVATION_REPORT; cmd->nsid = ns->id; - cmd->cdw10 = num_dwords; + num_dwords = (len >> 2); + cmd->cdw10 = num_dwords - 1; /* 0-based */ return nvme_qpair_submit_request(qpair, req); } diff --git a/test/unit/lib/nvme/nvme_ns_cmd.c/nvme_ns_cmd_ut.c b/test/unit/lib/nvme/nvme_ns_cmd.c/nvme_ns_cmd_ut.c index 4630f2105..caca2f75c 100644 --- a/test/unit/lib/nvme/nvme_ns_cmd.c/nvme_ns_cmd_ut.c +++ b/test/unit/lib/nvme/nvme_ns_cmd.c/nvme_ns_cmd_ut.c @@ -1310,7 +1310,7 @@ test_nvme_ns_cmd_reservation_report(void) CU_ASSERT(g_request->cmd.opc == SPDK_NVME_OPC_RESERVATION_REPORT); CU_ASSERT(g_request->cmd.nsid == ns.id); - CU_ASSERT(g_request->cmd.cdw10 == (size / 4)); + CU_ASSERT(g_request->cmd.cdw10 == (size >> 2) - 1); spdk_free(g_request->payload.contig_or_cb_arg); nvme_free_request(g_request);