nvmet: add a helper function for cqid checking

This patch adds a new helper function nvmet_check_io_cqid(). It is to be
used when parsing host commands for IO CQ creation/deletion and IO SQ
creation to ensure that the specified IO completion queue identifier
(CQID) is not 0 (Admin queue ID). This is a check that already occurs in
the nvmet_execute_x() functions prior to nvmet_check_cqid.

With the addition of this helper function, the CQ ID checks in the
nvmet_execute_x() function can be removed, and instead simply call
nvmet_check_io_cqid() in place of nvmet_check_cqid().

Signed-off-by: Wilfred Mallawa <wilfred.mallawa@wdc.com>
Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
Wilfred Mallawa 2025-04-24 15:13:49 +10:00 committed by Christoph Hellwig
parent c91a201291
commit b3649f829a
3 changed files with 10 additions and 12 deletions

View File

@ -96,12 +96,7 @@ static void nvmet_execute_delete_cq(struct nvmet_req *req)
goto complete;
}
if (!cqid) {
status = NVME_SC_QID_INVALID | NVME_STATUS_DNR;
goto complete;
}
status = nvmet_check_cqid(ctrl, cqid);
status = nvmet_check_io_cqid(ctrl, cqid);
if (status != NVME_SC_SUCCESS)
goto complete;
@ -127,12 +122,7 @@ static void nvmet_execute_create_cq(struct nvmet_req *req)
goto complete;
}
if (!cqid) {
status = NVME_SC_QID_INVALID | NVME_STATUS_DNR;
goto complete;
}
status = nvmet_check_cqid(ctrl, cqid);
status = nvmet_check_io_cqid(ctrl, cqid);
if (status != NVME_SC_SUCCESS)
goto complete;

View File

@ -859,6 +859,13 @@ u16 nvmet_check_cqid(struct nvmet_ctrl *ctrl, u16 cqid)
return NVME_SC_SUCCESS;
}
u16 nvmet_check_io_cqid(struct nvmet_ctrl *ctrl, u16 cqid)
{
if (!cqid)
return NVME_SC_QID_INVALID | NVME_STATUS_DNR;
return nvmet_check_cqid(ctrl, cqid);
}
u16 nvmet_cq_create(struct nvmet_ctrl *ctrl, struct nvmet_cq *cq,
u16 qid, u16 size)
{

View File

@ -572,6 +572,7 @@ void nvmet_execute_get_features(struct nvmet_req *req);
void nvmet_execute_keep_alive(struct nvmet_req *req);
u16 nvmet_check_cqid(struct nvmet_ctrl *ctrl, u16 cqid);
u16 nvmet_check_io_cqid(struct nvmet_ctrl *ctrl, u16 cqid);
void nvmet_cq_setup(struct nvmet_ctrl *ctrl, struct nvmet_cq *cq, u16 qid,
u16 size);
u16 nvmet_cq_create(struct nvmet_ctrl *ctrl, struct nvmet_cq *cq, u16 qid,