rdma: add error path for fill_iovs_multi_sgl
Catch an edge case where a multi sgl request is longer than the allowed transfer size. Change-Id: I79779050fe951d16f1240e2c3d8cf5037e576ea2 Signed-off-by: Seth Howell <seth.howell@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/440766 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
6812b63c5f
commit
a8169c37e0
@ -1641,6 +1641,7 @@ spdk_nvmf_rdma_request_parse_sgl(struct spdk_nvmf_rdma_transport *rtransport,
|
||||
struct spdk_nvme_cmd *cmd;
|
||||
struct spdk_nvme_cpl *rsp;
|
||||
struct spdk_nvme_sgl_descriptor *sgl;
|
||||
int rc;
|
||||
|
||||
cmd = &rdma_req->req.cmd->nvme_cmd;
|
||||
rsp = &rdma_req->req.rsp->nvme_cpl;
|
||||
@ -1730,9 +1731,14 @@ spdk_nvmf_rdma_request_parse_sgl(struct spdk_nvmf_rdma_transport *rtransport,
|
||||
return 0;
|
||||
} else if (sgl->generic.type == SPDK_NVME_SGL_TYPE_LAST_SEGMENT &&
|
||||
sgl->unkeyed.subtype == SPDK_NVME_SGL_SUBTYPE_OFFSET) {
|
||||
if (nvmf_rdma_request_fill_iovs_multi_sgl(rtransport, device, rdma_req) < 0) {
|
||||
|
||||
rc = nvmf_rdma_request_fill_iovs_multi_sgl(rtransport, device, rdma_req);
|
||||
if (rc == -ENOMEM) {
|
||||
SPDK_DEBUGLOG(SPDK_LOG_RDMA, "No available large data buffers. Queueing request %p\n", rdma_req);
|
||||
return 0;
|
||||
} else if (rc == -EINVAL) {
|
||||
SPDK_ERRLOG("Multi SGL element request length exceeds the max I/O size\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* backward compatible */
|
||||
|
Loading…
Reference in New Issue
Block a user