mirror of https://gitee.com/openkylin/linux.git
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;
|
||||
}
|
||||
|
||||
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);
|
||||
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;
|
||||
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 */
|
||||
if (offset & 0x3) {
|
||||
status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
|
||||
|
@ -227,12 +234,18 @@ static void nvmet_execute_get_disc_log_page(struct nvmet_req *req)
|
|||
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 nvme_id_ctrl *id;
|
||||
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);
|
||||
if (!id) {
|
||||
status = NVME_SC_INTERNAL;
|
||||
|
@ -344,31 +357,12 @@ u16 nvmet_parse_discovery_cmd(struct nvmet_req *req)
|
|||
return 0;
|
||||
case nvme_admin_get_log_page:
|
||||
req->data_len = nvmet_get_log_page_len(cmd);
|
||||
|
||||
switch (cmd->get_log_page.lid) {
|
||||
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;
|
||||
}
|
||||
req->execute = nvmet_execute_disc_get_log_page;
|
||||
return 0;
|
||||
case nvme_admin_identify:
|
||||
req->data_len = NVME_IDENTIFY_DATA_SIZE;
|
||||
switch (cmd->identify.cns) {
|
||||
case NVME_ID_CNS_CTRL:
|
||||
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;
|
||||
}
|
||||
req->execute = nvmet_execute_disc_identify;
|
||||
return 0;
|
||||
default:
|
||||
pr_err("unhandled cmd %d\n", cmd->common.opcode);
|
||||
req->error_loc = offsetof(struct nvme_common_command, opcode);
|
||||
|
|
Loading…
Reference in New Issue