Commit 6f86f2c9 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

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: default avatarChristoph Hellwig <hch@lst.de>
[split patch, update changelog]
Signed-off-by: default avatarLogan Gunthorpe <logang@deltatee.com>
Signed-off-by: default avatarKeith Busch <kbusch@kernel.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 2cb6963a
...@@ -157,7 +157,7 @@ static size_t discovery_log_entries(struct nvmet_req *req) ...@@ -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) ...@@ -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 @@ static void nvmet_execute_get_disc_log_page(struct nvmet_req *req) ...@@ -227,12 +234,18 @@ static void nvmet_execute_get_disc_log_page(struct nvmet_req *req)
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) ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment