diff --git a/lib/nvme/nvme_pcie.c b/lib/nvme/nvme_pcie.c index de6bef634..1279ad75c 100644 --- a/lib/nvme/nvme_pcie.c +++ b/lib/nvme/nvme_pcie.c @@ -1836,6 +1836,7 @@ nvme_pcie_qpair_submit_request(struct spdk_nvme_qpair *qpair, struct nvme_reques { struct nvme_tracker *tr; int rc = 0; + void *md_payload; struct spdk_nvme_ctrlr *ctrlr = qpair->ctrlr; struct nvme_pcie_qpair *pqpair = nvme_pcie_qpair(qpair); @@ -1866,6 +1867,16 @@ nvme_pcie_qpair_submit_request(struct spdk_nvme_qpair *qpair, struct nvme_reques tr->req = req; req->cmd.cid = tr->cid; + if (req->payload_size && req->payload.md) { + md_payload = req->payload.md + req->md_offset; + tr->req->cmd.mptr = spdk_vtophys(md_payload); + if (tr->req->cmd.mptr == SPDK_VTOPHYS_ERROR) { + nvme_pcie_fail_request_bad_vtophys(qpair, tr); + rc = -EINVAL; + goto exit; + } + } + if (req->payload_size == 0) { /* Null payload - leave PRP fields zeroed */ rc = 0;