From: Jinliang Wang Date: Fri, 19 Jan 2024 07:47:04 +0000 (-0800) Subject: mi: set correct rc and errno when crc mismatch X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=2f722b1b0f3d330f890f1a62f0580d6853c13074;p=users%2Fsagi%2Flibnvme.git mi: set correct rc and errno when crc mismatch Before the fix, when we meet crc mismatch response, the errno is 0 and rc is 1. This combination will be mistaken as Admin Generic Command Status code value 0x1 (Invalid Command Opcode): $ nvme id-ctrl mctp:1,20 crc mismatch NVMe status: Invalid Command Opcode: A reserved coded value or an unsupported value in the command opcode field(0x1 After the fix, the rc is -1, and errno is set to Bad message. $ nvme id-ctrl mctp:1,20 crc mismatch identify controller: Bad message Signed-off-by: Jinliang Wang --- diff --git a/src/nvme/mi.c b/src/nvme/mi.c index 82ed88a7..84d51b0c 100644 --- a/src/nvme/mi.c +++ b/src/nvme/mi.c @@ -433,7 +433,8 @@ int nvme_mi_submit(nvme_mi_ep_t ep, struct nvme_mi_req *req, rc = nvme_mi_verify_resp_mic(resp); if (rc) { nvme_msg(ep->root, LOG_WARNING, "crc mismatch\n"); - return rc; + errno = EBADMSG; + return -1; } } diff --git a/test/mi.c b/test/mi.c index a09c108b..a86ba155 100644 --- a/test/mi.c +++ b/test/mi.c @@ -306,7 +306,7 @@ static void test_invalid_crc(nvme_mi_ep_t ep) test_set_transport_callback(ep, test_invalid_crc_cb, NULL); rc = nvme_mi_mi_read_mi_data_subsys(ep, &ss_info); - assert(rc != 0); + assert(rc < 0); } /* test: test that the controller list populates the endpoint's list of