Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eb45ae88 authored by Amit Engel's avatar Amit Engel Committed by Greg Kroah-Hartman
Browse files

nvmet: pass back cntlid on successful completion



[ Upstream commit e804d5abe2d74cfe23f5f83be580d1cdc9307111 ]

According to the NVMe specification, the response dword 0 value of the
Connect command is based on status code: return cntlid for successful
compeltion return IPO and IATTR for connect invalid parameters.  Fix
a missing error information for a zero sized queue, and return the
cntlid also for I/O queue Connect commands.

Signed-off-by: default avatarAmit Engel <amit.engel@dell.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 6cb5d6ae
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -116,6 +116,7 @@ static u16 nvmet_install_queue(struct nvmet_ctrl *ctrl, struct nvmet_req *req)
	if (!sqsize) {
		pr_warn("queue size zero!\n");
		req->error_loc = offsetof(struct nvmf_connect_command, sqsize);
		req->cqe->result.u32 = IPO_IATTR_CONNECT_SQE(sqsize);
		ret = NVME_SC_CONNECT_INVALID_PARAM | NVME_SC_DNR;
		goto err;
	}
@@ -250,11 +251,11 @@ static void nvmet_execute_io_connect(struct nvmet_req *req)
	}

	status = nvmet_install_queue(ctrl, req);
	if (status) {
		/* pass back cntlid that had the issue of installing queue */
		req->cqe->result.u16 = cpu_to_le16(ctrl->cntlid);
	if (status)
		goto out_ctrl_put;
	}

	/* pass back cntlid for successful completion */
	req->cqe->result.u16 = cpu_to_le16(ctrl->cntlid);

	pr_debug("adding queue %d to ctrl %d.\n", qid, ctrl->cntlid);