]> www.infradead.org Git - users/sagi/libnvme.git/commitdiff
mi: set correct rc and errno when crc mismatch
authorJinliang Wang <jinliangw@google.com>
Fri, 19 Jan 2024 07:47:04 +0000 (23:47 -0800)
committerDaniel Wagner <wagi@monom.org>
Mon, 22 Jan 2024 11:35:42 +0000 (12:35 +0100)
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 <jinliangw@google.com>
src/nvme/mi.c
test/mi.c

index 82ed88a7ffe62c3d9e94262ecd1a5baa72884c88..84d51b0ca7ad56570b0168427b111b5451a15649 100644 (file)
@@ -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;
                }
        }
 
index a09c108b46a34675d4fb4d71a59dec0855fa1b47..a86ba1554bd1f860e9283dbb48552bd49ecb0929 100644 (file)
--- 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