nvmet: Cleanup discovery execute handlers
Push the lid and cns check into their respective handlers and, while we're at it, rename the functions to be consistent with other discovery handlers. Signed-off-by: Christoph Hellwig <hch@lst.de> [split patch, update changelog] Signed-off-by: Logan Gunthorpe <logang@deltatee.com> Signed-off-by: Keith Busch <kbusch@kernel.org> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
2cb6963a16
commit
6f86f2c9d9
|
@ -157,7 +157,7 @@ static size_t discovery_log_entries(struct nvmet_req *req)
|
||||||
return entries;
|
return entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void nvmet_execute_get_disc_log_page(struct nvmet_req *req)
|
static void nvmet_execute_disc_get_log_page(struct nvmet_req *req)
|
||||||
{
|
{
|
||||||
const int entry_size = sizeof(struct nvmf_disc_rsp_page_entry);
|
const int entry_size = sizeof(struct nvmf_disc_rsp_page_entry);
|
||||||
struct nvmet_ctrl *ctrl = req->sq->ctrl;
|
struct nvmet_ctrl *ctrl = req->sq->ctrl;
|
||||||
|
@ -171,6 +171,13 @@ static void nvmet_execute_get_disc_log_page(struct nvmet_req *req)
|
||||||
u16 status = 0;
|
u16 status = 0;
|
||||||
void *buffer;
|
void *buffer;
|
||||||
|
|
||||||
|
if (req->cmd->get_log_page.lid != NVME_LOG_DISC) {
|
||||||
|
req->error_loc =
|
||||||
|
offsetof(struct nvme_get_log_page_command, lid);
|
||||||
|
status = NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* Spec requires dword aligned offsets */
|
/* Spec requires dword aligned offsets */
|
||||||
if (offset & 0x3) {
|
if (offset & 0x3) {
|
||||||
status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
|
status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
|
||||||
|
@ -227,12 +234,18 @@ out:
|
||||||
nvmet_req_complete(req, status);
|
nvmet_req_complete(req, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void nvmet_execute_identify_disc_ctrl(struct nvmet_req *req)
|
static void nvmet_execute_disc_identify(struct nvmet_req *req)
|
||||||
{
|
{
|
||||||
struct nvmet_ctrl *ctrl = req->sq->ctrl;
|
struct nvmet_ctrl *ctrl = req->sq->ctrl;
|
||||||
struct nvme_id_ctrl *id;
|
struct nvme_id_ctrl *id;
|
||||||
u16 status = 0;
|
u16 status = 0;
|
||||||
|
|
||||||
|
if (req->cmd->identify.cns != NVME_ID_CNS_CTRL) {
|
||||||
|
req->error_loc = offsetof(struct nvme_identify, cns);
|
||||||
|
status = NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
id = kzalloc(sizeof(*id), GFP_KERNEL);
|
id = kzalloc(sizeof(*id), GFP_KERNEL);
|
||||||
if (!id) {
|
if (!id) {
|
||||||
status = NVME_SC_INTERNAL;
|
status = NVME_SC_INTERNAL;
|
||||||
|
@ -344,31 +357,12 @@ u16 nvmet_parse_discovery_cmd(struct nvmet_req *req)
|
||||||
return 0;
|
return 0;
|
||||||
case nvme_admin_get_log_page:
|
case nvme_admin_get_log_page:
|
||||||
req->data_len = nvmet_get_log_page_len(cmd);
|
req->data_len = nvmet_get_log_page_len(cmd);
|
||||||
|
req->execute = nvmet_execute_disc_get_log_page;
|
||||||
switch (cmd->get_log_page.lid) {
|
return 0;
|
||||||
case NVME_LOG_DISC:
|
|
||||||
req->execute = nvmet_execute_get_disc_log_page;
|
|
||||||
return 0;
|
|
||||||
default:
|
|
||||||
pr_err("unsupported get_log_page lid %d\n",
|
|
||||||
cmd->get_log_page.lid);
|
|
||||||
req->error_loc =
|
|
||||||
offsetof(struct nvme_get_log_page_command, lid);
|
|
||||||
return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
|
|
||||||
}
|
|
||||||
case nvme_admin_identify:
|
case nvme_admin_identify:
|
||||||
req->data_len = NVME_IDENTIFY_DATA_SIZE;
|
req->data_len = NVME_IDENTIFY_DATA_SIZE;
|
||||||
switch (cmd->identify.cns) {
|
req->execute = nvmet_execute_disc_identify;
|
||||||
case NVME_ID_CNS_CTRL:
|
return 0;
|
||||||
req->execute =
|
|
||||||
nvmet_execute_identify_disc_ctrl;
|
|
||||||
return 0;
|
|
||||||
default:
|
|
||||||
pr_err("unsupported identify cns %d\n",
|
|
||||||
cmd->identify.cns);
|
|
||||||
req->error_loc = offsetof(struct nvme_identify, cns);
|
|
||||||
return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
pr_err("unhandled cmd %d\n", cmd->common.opcode);
|
pr_err("unhandled cmd %d\n", cmd->common.opcode);
|
||||||
req->error_loc = offsetof(struct nvme_common_command, opcode);
|
req->error_loc = offsetof(struct nvme_common_command, opcode);
|
||||||
|
|
Loading…
Reference in New Issue