diff options
Diffstat (limited to 'drivers/nvme/host/fabrics.c')
| -rw-r--r-- | drivers/nvme/host/fabrics.c | 33 | 
1 files changed, 17 insertions, 16 deletions
| diff --git a/drivers/nvme/host/fabrics.c b/drivers/nvme/host/fabrics.c index 5a3f008d3480..916d13608059 100644 --- a/drivers/nvme/host/fabrics.c +++ b/drivers/nvme/host/fabrics.c @@ -161,7 +161,7 @@ EXPORT_SYMBOL_GPL(nvmf_get_subsysnqn);  int nvmf_reg_read32(struct nvme_ctrl *ctrl, u32 off, u32 *val)  {  	struct nvme_command cmd; -	struct nvme_completion cqe; +	union nvme_result res;  	int ret;  	memset(&cmd, 0, sizeof(cmd)); @@ -169,11 +169,11 @@ int nvmf_reg_read32(struct nvme_ctrl *ctrl, u32 off, u32 *val)  	cmd.prop_get.fctype = nvme_fabrics_type_property_get;  	cmd.prop_get.offset = cpu_to_le32(off); -	ret = __nvme_submit_sync_cmd(ctrl->admin_q, &cmd, &cqe, NULL, 0, 0, +	ret = __nvme_submit_sync_cmd(ctrl->admin_q, &cmd, &res, NULL, 0, 0,  			NVME_QID_ANY, 0, 0);  	if (ret >= 0) -		*val = le64_to_cpu(cqe.result64); +		*val = le64_to_cpu(res.u64);  	if (unlikely(ret != 0))  		dev_err(ctrl->device,  			"Property Get error: %d, offset %#x\n", @@ -207,7 +207,7 @@ EXPORT_SYMBOL_GPL(nvmf_reg_read32);  int nvmf_reg_read64(struct nvme_ctrl *ctrl, u32 off, u64 *val)  {  	struct nvme_command cmd; -	struct nvme_completion cqe; +	union nvme_result res;  	int ret;  	memset(&cmd, 0, sizeof(cmd)); @@ -216,11 +216,11 @@ int nvmf_reg_read64(struct nvme_ctrl *ctrl, u32 off, u64 *val)  	cmd.prop_get.attrib = 1;  	cmd.prop_get.offset = cpu_to_le32(off); -	ret = __nvme_submit_sync_cmd(ctrl->admin_q, &cmd, &cqe, NULL, 0, 0, +	ret = __nvme_submit_sync_cmd(ctrl->admin_q, &cmd, &res, NULL, 0, 0,  			NVME_QID_ANY, 0, 0);  	if (ret >= 0) -		*val = le64_to_cpu(cqe.result64); +		*val = le64_to_cpu(res.u64);  	if (unlikely(ret != 0))  		dev_err(ctrl->device,  			"Property Get error: %d, offset %#x\n", @@ -368,7 +368,7 @@ static void nvmf_log_connect_error(struct nvme_ctrl *ctrl,  int nvmf_connect_admin_queue(struct nvme_ctrl *ctrl)  {  	struct nvme_command cmd; -	struct nvme_completion cqe; +	union nvme_result res;  	struct nvmf_connect_data *data;  	int ret; @@ -400,16 +400,16 @@ int nvmf_connect_admin_queue(struct nvme_ctrl *ctrl)  	strncpy(data->subsysnqn, ctrl->opts->subsysnqn, NVMF_NQN_SIZE);  	strncpy(data->hostnqn, ctrl->opts->host->nqn, NVMF_NQN_SIZE); -	ret = __nvme_submit_sync_cmd(ctrl->admin_q, &cmd, &cqe, +	ret = __nvme_submit_sync_cmd(ctrl->admin_q, &cmd, &res,  			data, sizeof(*data), 0, NVME_QID_ANY, 1,  			BLK_MQ_REQ_RESERVED | BLK_MQ_REQ_NOWAIT);  	if (ret) { -		nvmf_log_connect_error(ctrl, ret, le32_to_cpu(cqe.result), +		nvmf_log_connect_error(ctrl, ret, le32_to_cpu(res.u32),  				       &cmd, data);  		goto out_free_data;  	} -	ctrl->cntlid = le16_to_cpu(cqe.result16); +	ctrl->cntlid = le16_to_cpu(res.u16);  out_free_data:  	kfree(data); @@ -441,7 +441,7 @@ int nvmf_connect_io_queue(struct nvme_ctrl *ctrl, u16 qid)  {  	struct nvme_command cmd;  	struct nvmf_connect_data *data; -	struct nvme_completion cqe; +	union nvme_result res;  	int ret;  	memset(&cmd, 0, sizeof(cmd)); @@ -459,11 +459,11 @@ int nvmf_connect_io_queue(struct nvme_ctrl *ctrl, u16 qid)  	strncpy(data->subsysnqn, ctrl->opts->subsysnqn, NVMF_NQN_SIZE);  	strncpy(data->hostnqn, ctrl->opts->host->nqn, NVMF_NQN_SIZE); -	ret = __nvme_submit_sync_cmd(ctrl->connect_q, &cmd, &cqe, +	ret = __nvme_submit_sync_cmd(ctrl->connect_q, &cmd, &res,  			data, sizeof(*data), 0, qid, 1,  			BLK_MQ_REQ_RESERVED | BLK_MQ_REQ_NOWAIT);  	if (ret) { -		nvmf_log_connect_error(ctrl, ret, le32_to_cpu(cqe.result), +		nvmf_log_connect_error(ctrl, ret, le32_to_cpu(res.u32),  				       &cmd, data);  	}  	kfree(data); @@ -576,7 +576,7 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts,  			nqnlen = strlen(opts->subsysnqn);  			if (nqnlen >= NVMF_NQN_SIZE) {  				pr_err("%s needs to be < %d bytes\n", -				opts->subsysnqn, NVMF_NQN_SIZE); +					opts->subsysnqn, NVMF_NQN_SIZE);  				ret = -EINVAL;  				goto out;  			} @@ -666,10 +666,12 @@ static int nvmf_parse_options(struct nvmf_ctrl_options *opts,  			if (nqnlen >= NVMF_NQN_SIZE) {  				pr_err("%s needs to be < %d bytes\n",  					p, NVMF_NQN_SIZE); +				kfree(p);  				ret = -EINVAL;  				goto out;  			}  			opts->host = nvmf_host_add(p); +			kfree(p);  			if (!opts->host) {  				ret = -ENOMEM;  				goto out; @@ -825,8 +827,7 @@ nvmf_create_ctrl(struct device *dev, const char *buf, size_t count)  out_unlock:  	mutex_unlock(&nvmf_transports_mutex);  out_free_opts: -	nvmf_host_put(opts->host); -	kfree(opts); +	nvmf_free_options(opts);  	return ERR_PTR(ret);  } |