diff options
Diffstat (limited to 'drivers/nvme/target/fabrics-cmd.c')
| -rw-r--r-- | drivers/nvme/target/fabrics-cmd.c | 17 | 
1 files changed, 7 insertions, 10 deletions
| diff --git a/drivers/nvme/target/fabrics-cmd.c b/drivers/nvme/target/fabrics-cmd.c index 42bd12b8bf00..1420a8e3e0b1 100644 --- a/drivers/nvme/target/fabrics-cmd.c +++ b/drivers/nvme/target/fabrics-cmd.c @@ -190,12 +190,8 @@ static void nvmet_execute_admin_connect(struct nvmet_req *req)  	status = nvmet_alloc_ctrl(d->subsysnqn, d->hostnqn, req,  				  le32_to_cpu(c->kato), &ctrl); -	if (status) { -		if (status == (NVME_SC_INVALID_FIELD | NVME_SC_DNR)) -			req->error_loc = -				offsetof(struct nvme_common_command, opcode); +	if (status)  		goto out; -	}  	ctrl->pi_support = ctrl->port->pi_enable && ctrl->subsys->pi_support; @@ -222,7 +218,7 @@ static void nvmet_execute_io_connect(struct nvmet_req *req)  {  	struct nvmf_connect_command *c = &req->cmd->connect;  	struct nvmf_connect_data *d; -	struct nvmet_ctrl *ctrl = NULL; +	struct nvmet_ctrl *ctrl;  	u16 qid = le16_to_cpu(c->qid);  	u16 status = 0; @@ -249,11 +245,12 @@ static void nvmet_execute_io_connect(struct nvmet_req *req)  		goto out;  	} -	status = nvmet_ctrl_find_get(d->subsysnqn, d->hostnqn, -				     le16_to_cpu(d->cntlid), -				     req, &ctrl); -	if (status) +	ctrl = nvmet_ctrl_find_get(d->subsysnqn, d->hostnqn, +				   le16_to_cpu(d->cntlid), req); +	if (!ctrl) { +		status = NVME_SC_CONNECT_INVALID_PARAM | NVME_SC_DNR;  		goto out; +	}  	if (unlikely(qid > ctrl->subsys->max_qid)) {  		pr_warn("invalid queue id (%d)\n", qid); | 
