nvmet: remove unnecessary ctrl parameter
[ Upstream commit de5878048e11f1ec44164ebb8994de132074367a ] The function nvmet_ctrl_find_get() accepts out pointer to nvmet_ctrl structure. This function returns the same error value from two places that is :- NVME_SC_CONNECT_INVALID_PARAM | NVME_SC_DNR. Move this to the caller so we can change the return type to nvmet_ctrl. Now that we can changed the return type, instead of taking out pointer to the nvmet_ctrl structure remove that function parameter and return the valid nvmet_ctrl pointer on success and NULL on failure. Also, add and rename the goto labels for more readability with comments. Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Stable-dep-of: 1c22e0295a5e ("nvmet: nul-terminate the NQNs passed in the connect command") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
d24a18cb51
commit
86a7f67d76
@ -1189,19 +1189,19 @@ static void nvmet_init_cap(struct nvmet_ctrl *ctrl)
|
|||||||
ctrl->cap |= NVMET_QUEUE_SIZE - 1;
|
ctrl->cap |= NVMET_QUEUE_SIZE - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 nvmet_ctrl_find_get(const char *subsysnqn, const char *hostnqn, u16 cntlid,
|
struct nvmet_ctrl *nvmet_ctrl_find_get(const char *subsysnqn,
|
||||||
struct nvmet_req *req, struct nvmet_ctrl **ret)
|
const char *hostnqn, u16 cntlid,
|
||||||
|
struct nvmet_req *req)
|
||||||
{
|
{
|
||||||
|
struct nvmet_ctrl *ctrl = NULL;
|
||||||
struct nvmet_subsys *subsys;
|
struct nvmet_subsys *subsys;
|
||||||
struct nvmet_ctrl *ctrl;
|
|
||||||
u16 status = 0;
|
|
||||||
|
|
||||||
subsys = nvmet_find_get_subsys(req->port, subsysnqn);
|
subsys = nvmet_find_get_subsys(req->port, subsysnqn);
|
||||||
if (!subsys) {
|
if (!subsys) {
|
||||||
pr_warn("connect request for invalid subsystem %s!\n",
|
pr_warn("connect request for invalid subsystem %s!\n",
|
||||||
subsysnqn);
|
subsysnqn);
|
||||||
req->cqe->result.u32 = IPO_IATTR_CONNECT_DATA(subsysnqn);
|
req->cqe->result.u32 = IPO_IATTR_CONNECT_DATA(subsysnqn);
|
||||||
return NVME_SC_CONNECT_INVALID_PARAM | NVME_SC_DNR;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_lock(&subsys->lock);
|
mutex_lock(&subsys->lock);
|
||||||
@ -1214,20 +1214,21 @@ u16 nvmet_ctrl_find_get(const char *subsysnqn, const char *hostnqn, u16 cntlid,
|
|||||||
if (!kref_get_unless_zero(&ctrl->ref))
|
if (!kref_get_unless_zero(&ctrl->ref))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
*ret = ctrl;
|
/* ctrl found */
|
||||||
goto out;
|
goto found;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctrl = NULL; /* ctrl not found */
|
||||||
pr_warn("could not find controller %d for subsys %s / host %s\n",
|
pr_warn("could not find controller %d for subsys %s / host %s\n",
|
||||||
cntlid, subsysnqn, hostnqn);
|
cntlid, subsysnqn, hostnqn);
|
||||||
req->cqe->result.u32 = IPO_IATTR_CONNECT_DATA(cntlid);
|
req->cqe->result.u32 = IPO_IATTR_CONNECT_DATA(cntlid);
|
||||||
status = NVME_SC_CONNECT_INVALID_PARAM | NVME_SC_DNR;
|
|
||||||
|
|
||||||
out:
|
found:
|
||||||
mutex_unlock(&subsys->lock);
|
mutex_unlock(&subsys->lock);
|
||||||
nvmet_subsys_put(subsys);
|
nvmet_subsys_put(subsys);
|
||||||
return status;
|
out:
|
||||||
|
return ctrl;
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 nvmet_check_ctrl_status(struct nvmet_req *req, struct nvme_command *cmd)
|
u16 nvmet_check_ctrl_status(struct nvmet_req *req, struct nvme_command *cmd)
|
||||||
|
@ -223,7 +223,7 @@ static void nvmet_execute_io_connect(struct nvmet_req *req)
|
|||||||
{
|
{
|
||||||
struct nvmf_connect_command *c = &req->cmd->connect;
|
struct nvmf_connect_command *c = &req->cmd->connect;
|
||||||
struct nvmf_connect_data *d;
|
struct nvmf_connect_data *d;
|
||||||
struct nvmet_ctrl *ctrl = NULL;
|
struct nvmet_ctrl *ctrl;
|
||||||
u16 qid = le16_to_cpu(c->qid);
|
u16 qid = le16_to_cpu(c->qid);
|
||||||
u16 status = 0;
|
u16 status = 0;
|
||||||
|
|
||||||
@ -250,11 +250,12 @@ static void nvmet_execute_io_connect(struct nvmet_req *req)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
status = nvmet_ctrl_find_get(d->subsysnqn, d->hostnqn,
|
ctrl = nvmet_ctrl_find_get(d->subsysnqn, d->hostnqn,
|
||||||
le16_to_cpu(d->cntlid),
|
le16_to_cpu(d->cntlid), req);
|
||||||
req, &ctrl);
|
if (!ctrl) {
|
||||||
if (status)
|
status = NVME_SC_CONNECT_INVALID_PARAM | NVME_SC_DNR;
|
||||||
goto out;
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (unlikely(qid > ctrl->subsys->max_qid)) {
|
if (unlikely(qid > ctrl->subsys->max_qid)) {
|
||||||
pr_warn("invalid queue id (%d)\n", qid);
|
pr_warn("invalid queue id (%d)\n", qid);
|
||||||
|
@ -430,8 +430,9 @@ void nvmet_ctrl_fatal_error(struct nvmet_ctrl *ctrl);
|
|||||||
void nvmet_update_cc(struct nvmet_ctrl *ctrl, u32 new);
|
void nvmet_update_cc(struct nvmet_ctrl *ctrl, u32 new);
|
||||||
u16 nvmet_alloc_ctrl(const char *subsysnqn, const char *hostnqn,
|
u16 nvmet_alloc_ctrl(const char *subsysnqn, const char *hostnqn,
|
||||||
struct nvmet_req *req, u32 kato, struct nvmet_ctrl **ctrlp);
|
struct nvmet_req *req, u32 kato, struct nvmet_ctrl **ctrlp);
|
||||||
u16 nvmet_ctrl_find_get(const char *subsysnqn, const char *hostnqn, u16 cntlid,
|
struct nvmet_ctrl *nvmet_ctrl_find_get(const char *subsysnqn,
|
||||||
struct nvmet_req *req, struct nvmet_ctrl **ret);
|
const char *hostnqn, u16 cntlid,
|
||||||
|
struct nvmet_req *req);
|
||||||
void nvmet_ctrl_put(struct nvmet_ctrl *ctrl);
|
void nvmet_ctrl_put(struct nvmet_ctrl *ctrl);
|
||||||
u16 nvmet_check_ctrl_status(struct nvmet_req *req, struct nvme_command *cmd);
|
u16 nvmet_check_ctrl_status(struct nvmet_req *req, struct nvme_command *cmd);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user