vhost/nvme: return proper status for QID errors
If the user requests an invalid QID or CQID in Create I/O Completion Queue or Create I/O Submission Queue, we need to return an error of Invalid Queue Identifier as indicated by the spec. Change-Id: I7467aa04da9e374bb596731f4e4174967d44cffb Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-on: https://review.gerrithub.io/408767 Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
0368077d70
commit
d2b764f4d7
@ -581,6 +581,7 @@ vhost_nvme_create_io_sq(struct spdk_vhost_nvme_dev *nvme,
|
||||
uint16_t qid, qsize, cqid;
|
||||
uint64_t dma_addr;
|
||||
uint64_t requested_len;
|
||||
struct spdk_vhost_nvme_cq *cq;
|
||||
struct spdk_vhost_nvme_sq *sq;
|
||||
|
||||
/* physical contiguous */
|
||||
@ -597,9 +598,15 @@ vhost_nvme_create_io_sq(struct spdk_vhost_nvme_dev *nvme,
|
||||
}
|
||||
|
||||
sq = spdk_vhost_nvme_get_sq_from_qid(nvme, qid);
|
||||
if (!sq) {
|
||||
cq = spdk_vhost_nvme_get_cq_from_qid(nvme, cqid);
|
||||
if (!sq || !cq) {
|
||||
SPDK_DEBUGLOG(SPDK_LOG_VHOST_NVME, "User requested invalid QID %u or CQID %u\n",
|
||||
qid, cqid);
|
||||
cpl->status.sct = SPDK_NVME_SCT_COMMAND_SPECIFIC;
|
||||
cpl->status.sc = SPDK_NVME_SC_INVALID_QUEUE_IDENTIFIER;
|
||||
return -1;
|
||||
}
|
||||
|
||||
sq->sqid = qid;
|
||||
sq->cqid = cqid;
|
||||
sq->size = qsize + 1;
|
||||
@ -670,6 +677,9 @@ vhost_nvme_create_io_cq(struct spdk_vhost_nvme_dev *nvme,
|
||||
|
||||
cq = spdk_vhost_nvme_get_cq_from_qid(nvme, qid);
|
||||
if (!cq) {
|
||||
SPDK_DEBUGLOG(SPDK_LOG_VHOST_NVME, "User requested invalid QID %u\n", qid);
|
||||
cpl->status.sct = SPDK_NVME_SCT_COMMAND_SPECIFIC;
|
||||
cpl->status.sc = SPDK_NVME_SC_INVALID_QUEUE_IDENTIFIER;
|
||||
return -1;
|
||||
}
|
||||
cq->cqid = qid;
|
||||
|
Loading…
x
Reference in New Issue
Block a user