From f206551388e7e651550660f37cddc73d77972ae0 Mon Sep 17 00:00:00 2001 From: Jacek Kalwas Date: Fri, 6 Dec 2019 12:29:47 +0100 Subject: [PATCH] nvmf: fix status override in case parse_sgl fails It is valuable to have more detail status instead SPDK_NVME_SC_INTERNAL_DEVICE_ERROR. Signed-off-by: Jacek Kalwas Change-Id: Ifd003b490a7ae9af017645c97636ceaf2f93d4b0 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/476634 Community-CI: Broadcom SPDK FC-NVMe CI Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto --- lib/nvmf/rdma.c | 3 ++- lib/nvmf/tcp.c | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index 2840f0180..6ee7a806a 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -1870,6 +1870,7 @@ spdk_nvmf_rdma_request_parse_sgl(struct spdk_nvmf_rdma_transport *rtransport, if (spdk_unlikely(rc < 0)) { if (rc == -EINVAL) { SPDK_ERRLOG("SGL length exceeds the max I/O size\n"); + rsp->status.sc = SPDK_NVME_SC_DATA_SGL_LENGTH_INVALID; return -1; } /* No available buffers. Queue this request up. */ @@ -1926,6 +1927,7 @@ spdk_nvmf_rdma_request_parse_sgl(struct spdk_nvmf_rdma_transport *rtransport, return 0; } else if (rc == -EINVAL) { SPDK_ERRLOG("Multi SGL element request length exceeds the max I/O size\n"); + rsp->status.sc = SPDK_NVME_SC_DATA_SGL_LENGTH_INVALID; return -1; } @@ -2065,7 +2067,6 @@ spdk_nvmf_rdma_request_process(struct spdk_nvmf_rdma_transport *rtransport, rc = spdk_nvmf_rdma_request_parse_sgl(rtransport, device, rdma_req); if (rc < 0) { STAILQ_REMOVE_HEAD(&rgroup->group.pending_buf_queue, buf_link); - rsp->status.sc = SPDK_NVME_SC_INTERNAL_DEVICE_ERROR; rdma_req->state = RDMA_REQUEST_STATE_READY_TO_COMPLETE; break; } diff --git a/lib/nvmf/tcp.c b/lib/nvmf/tcp.c index 0d9a5a4d8..17729844e 100644 --- a/lib/nvmf/tcp.c +++ b/lib/nvmf/tcp.c @@ -2446,7 +2446,6 @@ spdk_nvmf_tcp_req_process(struct spdk_nvmf_tcp_transport *ttransport, struct spdk_nvmf_tcp_req *tcp_req) { struct spdk_nvmf_tcp_qpair *tqpair; - struct spdk_nvme_cpl *rsp = &tcp_req->req.rsp->nvme_cpl; int rc; enum spdk_nvmf_tcp_req_state prev_state; bool progress = false; @@ -2517,7 +2516,6 @@ spdk_nvmf_tcp_req_process(struct spdk_nvmf_tcp_transport *ttransport, rc = spdk_nvmf_tcp_req_parse_sgl(tcp_req, transport, group); if (rc < 0) { STAILQ_REMOVE_HEAD(&group->pending_buf_queue, buf_link); - rsp->status.sc = SPDK_NVME_SC_INTERNAL_DEVICE_ERROR; /* Reset the tqpair receving pdu state */ spdk_nvmf_tcp_qpair_set_recv_state(tqpair, NVME_TCP_PDU_RECV_STATE_ERROR); spdk_nvmf_tcp_req_set_state(tcp_req, TCP_REQUEST_STATE_READY_TO_COMPLETE);