mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 06:33:07 +00:00
nvmet: parse fabrics commands on io queues
Some fabrics commands can be sent via io queues, so add a new function nvmet_parse_fabrics_io_cmd() and rename the existing nvmet_parse_fabrics_cmd() to nvmet_parse_fabrics_admin_cmd(). Signed-off-by: Hannes Reinecke <hare@suse.de> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
b61775d185
commit
6490c9ed06
4 changed files with 23 additions and 3 deletions
|
@ -1017,7 +1017,7 @@ u16 nvmet_parse_admin_cmd(struct nvmet_req *req)
|
||||||
u16 ret;
|
u16 ret;
|
||||||
|
|
||||||
if (nvme_is_fabrics(cmd))
|
if (nvme_is_fabrics(cmd))
|
||||||
return nvmet_parse_fabrics_cmd(req);
|
return nvmet_parse_fabrics_admin_cmd(req);
|
||||||
if (nvmet_is_disc_subsys(nvmet_req_subsys(req)))
|
if (nvmet_is_disc_subsys(nvmet_req_subsys(req)))
|
||||||
return nvmet_parse_discovery_cmd(req);
|
return nvmet_parse_discovery_cmd(req);
|
||||||
|
|
||||||
|
|
|
@ -865,8 +865,12 @@ static inline u16 nvmet_io_cmd_check_access(struct nvmet_req *req)
|
||||||
|
|
||||||
static u16 nvmet_parse_io_cmd(struct nvmet_req *req)
|
static u16 nvmet_parse_io_cmd(struct nvmet_req *req)
|
||||||
{
|
{
|
||||||
|
struct nvme_command *cmd = req->cmd;
|
||||||
u16 ret;
|
u16 ret;
|
||||||
|
|
||||||
|
if (nvme_is_fabrics(cmd))
|
||||||
|
return nvmet_parse_fabrics_io_cmd(req);
|
||||||
|
|
||||||
ret = nvmet_check_ctrl_status(req);
|
ret = nvmet_check_ctrl_status(req);
|
||||||
if (unlikely(ret))
|
if (unlikely(ret))
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -82,7 +82,7 @@ static void nvmet_execute_prop_get(struct nvmet_req *req)
|
||||||
nvmet_req_complete(req, status);
|
nvmet_req_complete(req, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 nvmet_parse_fabrics_cmd(struct nvmet_req *req)
|
u16 nvmet_parse_fabrics_admin_cmd(struct nvmet_req *req)
|
||||||
{
|
{
|
||||||
struct nvme_command *cmd = req->cmd;
|
struct nvme_command *cmd = req->cmd;
|
||||||
|
|
||||||
|
@ -103,6 +103,21 @@ u16 nvmet_parse_fabrics_cmd(struct nvmet_req *req)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u16 nvmet_parse_fabrics_io_cmd(struct nvmet_req *req)
|
||||||
|
{
|
||||||
|
struct nvme_command *cmd = req->cmd;
|
||||||
|
|
||||||
|
switch (cmd->fabrics.fctype) {
|
||||||
|
default:
|
||||||
|
pr_debug("received unknown capsule type 0x%x\n",
|
||||||
|
cmd->fabrics.fctype);
|
||||||
|
req->error_loc = offsetof(struct nvmf_common_command, fctype);
|
||||||
|
return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static u16 nvmet_install_queue(struct nvmet_ctrl *ctrl, struct nvmet_req *req)
|
static u16 nvmet_install_queue(struct nvmet_ctrl *ctrl, struct nvmet_req *req)
|
||||||
{
|
{
|
||||||
struct nvmf_connect_command *c = &req->cmd->connect;
|
struct nvmf_connect_command *c = &req->cmd->connect;
|
||||||
|
|
|
@ -420,7 +420,8 @@ u16 nvmet_file_parse_io_cmd(struct nvmet_req *req);
|
||||||
u16 nvmet_bdev_zns_parse_io_cmd(struct nvmet_req *req);
|
u16 nvmet_bdev_zns_parse_io_cmd(struct nvmet_req *req);
|
||||||
u16 nvmet_parse_admin_cmd(struct nvmet_req *req);
|
u16 nvmet_parse_admin_cmd(struct nvmet_req *req);
|
||||||
u16 nvmet_parse_discovery_cmd(struct nvmet_req *req);
|
u16 nvmet_parse_discovery_cmd(struct nvmet_req *req);
|
||||||
u16 nvmet_parse_fabrics_cmd(struct nvmet_req *req);
|
u16 nvmet_parse_fabrics_admin_cmd(struct nvmet_req *req);
|
||||||
|
u16 nvmet_parse_fabrics_io_cmd(struct nvmet_req *req);
|
||||||
|
|
||||||
bool nvmet_req_init(struct nvmet_req *req, struct nvmet_cq *cq,
|
bool nvmet_req_init(struct nvmet_req *req, struct nvmet_cq *cq,
|
||||||
struct nvmet_sq *sq, const struct nvmet_fabrics_ops *ops);
|
struct nvmet_sq *sq, const struct nvmet_fabrics_ops *ops);
|
||||||
|
|
Loading…
Reference in a new issue