diff --git a/lib/nvme/nvme_qpair.c b/lib/nvme/nvme_qpair.c index 053a8a47d..ac4953292 100644 --- a/lib/nvme/nvme_qpair.c +++ b/lib/nvme/nvme_qpair.c @@ -665,6 +665,7 @@ _nvme_qpair_build_hw_sgl_request(struct spdk_nvme_qpair *qpair, struct nvme_requ /* * Build scattered payloads. */ + nvme_assert(req->payload_size != 0, ("cannot build SGL for zero-length transfer\n")); nvme_assert(req->payload.type == NVME_PAYLOAD_TYPE_SGL, ("sgl payload type required\n")); nvme_assert(req->payload.u.sgl.reset_sgl_fn != NULL, ("sgl reset callback required\n")); nvme_assert(req->payload.u.sgl.next_sge_fn != NULL, ("sgl callback required\n")); @@ -704,14 +705,11 @@ _nvme_qpair_build_hw_sgl_request(struct spdk_nvme_qpair *qpair, struct nvme_requ req->cmd.dptr.sgl1.type = SPDK_NVME_SGL_TYPE_DATA_BLOCK; req->cmd.dptr.sgl1.address = phys_addr; req->cmd.dptr.sgl1.length = data_transfered; - } else if (nseg > 1) { + } else { /* For now we can only support 1 SGL segment in NVMe controller */ req->cmd.dptr.sgl1.type = SPDK_NVME_SGL_TYPE_LAST_SEGMENT; req->cmd.dptr.sgl1.address = tr->prp_sgl_bus_addr; req->cmd.dptr.sgl1.length = nseg * sizeof(struct spdk_nvme_sgl_descriptor); - } else { - _nvme_fail_request_bad_vtophys(qpair, tr); - return -1; } return 0;