Commit 7a1f46e3 authored by Minwoo Im's avatar Minwoo Im Committed by Christoph Hellwig

nvme: introduce nvme_is_fabrics to check fabrics cmd

This patch introduces a nvme_is_fabrics() inline function to check
whether or not the given command structure is for fabrics.
Signed-off-by: default avatarMinwoo Im <minwoo.im.dev@gmail.com>
Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
Signed-off-by: default avatarSagi Grimberg <sagi@grimberg.me>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 1a87ee65
...@@ -578,7 +578,7 @@ bool __nvmf_check_ready(struct nvme_ctrl *ctrl, struct request *rq, ...@@ -578,7 +578,7 @@ bool __nvmf_check_ready(struct nvme_ctrl *ctrl, struct request *rq,
switch (ctrl->state) { switch (ctrl->state) {
case NVME_CTRL_NEW: case NVME_CTRL_NEW:
case NVME_CTRL_CONNECTING: case NVME_CTRL_CONNECTING:
if (req->cmd->common.opcode == nvme_fabrics_command && if (nvme_is_fabrics(req->cmd) &&
req->cmd->fabrics.fctype == nvme_fabrics_type_connect) req->cmd->fabrics.fctype == nvme_fabrics_type_connect)
return true; return true;
break; break;
......
...@@ -873,7 +873,7 @@ bool nvmet_req_init(struct nvmet_req *req, struct nvmet_cq *cq, ...@@ -873,7 +873,7 @@ bool nvmet_req_init(struct nvmet_req *req, struct nvmet_cq *cq,
status = nvmet_parse_connect_cmd(req); status = nvmet_parse_connect_cmd(req);
else if (likely(req->sq->qid != 0)) else if (likely(req->sq->qid != 0))
status = nvmet_parse_io_cmd(req); status = nvmet_parse_io_cmd(req);
else if (req->cmd->common.opcode == nvme_fabrics_command) else if (nvme_is_fabrics(req->cmd))
status = nvmet_parse_fabrics_cmd(req); status = nvmet_parse_fabrics_cmd(req);
else if (req->sq->ctrl->subsys->type == NVME_NQN_DISC) else if (req->sq->ctrl->subsys->type == NVME_NQN_DISC)
status = nvmet_parse_discovery_cmd(req); status = nvmet_parse_discovery_cmd(req);
......
...@@ -268,7 +268,7 @@ u16 nvmet_parse_connect_cmd(struct nvmet_req *req) ...@@ -268,7 +268,7 @@ u16 nvmet_parse_connect_cmd(struct nvmet_req *req)
{ {
struct nvme_command *cmd = req->cmd; struct nvme_command *cmd = req->cmd;
if (cmd->common.opcode != nvme_fabrics_command) { if (!nvme_is_fabrics(cmd)) {
pr_err("invalid command 0x%x on unconnected queue.\n", pr_err("invalid command 0x%x on unconnected queue.\n",
cmd->fabrics.opcode); cmd->fabrics.opcode);
req->error_loc = offsetof(struct nvme_common_command, opcode); req->error_loc = offsetof(struct nvme_common_command, opcode);
......
...@@ -1806,7 +1806,7 @@ nvmet_fc_prep_fcp_rsp(struct nvmet_fc_tgtport *tgtport, ...@@ -1806,7 +1806,7 @@ nvmet_fc_prep_fcp_rsp(struct nvmet_fc_tgtport *tgtport,
*/ */
rspcnt = atomic_inc_return(&fod->queue->zrspcnt); rspcnt = atomic_inc_return(&fod->queue->zrspcnt);
if (!(rspcnt % fod->queue->ersp_ratio) || if (!(rspcnt % fod->queue->ersp_ratio) ||
sqe->opcode == nvme_fabrics_command || nvme_is_fabrics((struct nvme_command *) sqe) ||
xfr_length != fod->req.transfer_len || xfr_length != fod->req.transfer_len ||
(le16_to_cpu(cqe->status) & 0xFFFE) || cqewd[0] || cqewd[1] || (le16_to_cpu(cqe->status) & 0xFFFE) || cqewd[0] || cqewd[1] ||
(sqe->flags & (NVME_CMD_FUSE_FIRST | NVME_CMD_FUSE_SECOND)) || (sqe->flags & (NVME_CMD_FUSE_FIRST | NVME_CMD_FUSE_SECOND)) ||
......
...@@ -1165,6 +1165,11 @@ struct nvme_command { ...@@ -1165,6 +1165,11 @@ struct nvme_command {
}; };
}; };
static inline bool nvme_is_fabrics(struct nvme_command *cmd)
{
return cmd->common.opcode == nvme_fabrics_command;
}
struct nvme_error_slot { struct nvme_error_slot {
__le64 error_count; __le64 error_count;
__le16 sqid; __le16 sqid;
...@@ -1186,7 +1191,7 @@ static inline bool nvme_is_write(struct nvme_command *cmd) ...@@ -1186,7 +1191,7 @@ static inline bool nvme_is_write(struct nvme_command *cmd)
* *
* Why can't we simply have a Fabrics In and Fabrics out command? * Why can't we simply have a Fabrics In and Fabrics out command?
*/ */
if (unlikely(cmd->common.opcode == nvme_fabrics_command)) if (unlikely(nvme_is_fabrics(cmd)))
return cmd->fabrics.fctype & 1; return cmd->fabrics.fctype & 1;
return cmd->common.opcode & 1; return cmd->common.opcode & 1;
} }
......
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