diff options
| -rw-r--r-- | drivers/nvme/host/fc.c | 18 | 
1 files changed, 15 insertions, 3 deletions
| diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c index 691f2df574ce..ad9336343e01 100644 --- a/drivers/nvme/host/fc.c +++ b/drivers/nvme/host/fc.c @@ -2551,6 +2551,9 @@ nvme_fc_error_recovery(struct nvme_fc_ctrl *ctrl, char *errmsg)  	if (ctrl->ctrl.state == NVME_CTRL_CONNECTING) {  		__nvme_fc_abort_outstanding_ios(ctrl, true);  		set_bit(ASSOC_FAILED, &ctrl->flags); +		dev_warn(ctrl->ctrl.device, +			"NVME-FC{%d}: transport error during (re)connect\n", +			ctrl->cnum);  		return;  	} @@ -3110,7 +3113,9 @@ nvme_fc_create_association(struct nvme_fc_ctrl *ctrl)  	 */  	ret = nvme_enable_ctrl(&ctrl->ctrl); -	if (ret || test_bit(ASSOC_FAILED, &ctrl->flags)) +	if (!ret && test_bit(ASSOC_FAILED, &ctrl->flags)) +		ret = -EIO; +	if (ret)  		goto out_disconnect_admin_queue;  	ctrl->ctrl.max_segments = ctrl->lport->ops->max_sgl_segments; @@ -3120,7 +3125,9 @@ nvme_fc_create_association(struct nvme_fc_ctrl *ctrl)  	nvme_unquiesce_admin_queue(&ctrl->ctrl);  	ret = nvme_init_ctrl_finish(&ctrl->ctrl, false); -	if (ret || test_bit(ASSOC_FAILED, &ctrl->flags)) +	if (!ret && test_bit(ASSOC_FAILED, &ctrl->flags)) +		ret = -EIO; +	if (ret)  		goto out_disconnect_admin_queue;  	/* sanity checks */ @@ -3165,7 +3172,9 @@ nvme_fc_create_association(struct nvme_fc_ctrl *ctrl)  		else  			ret = nvme_fc_recreate_io_queues(ctrl);  	} -	if (ret || test_bit(ASSOC_FAILED, &ctrl->flags)) +	if (!ret && test_bit(ASSOC_FAILED, &ctrl->flags)) +		ret = -EIO; +	if (ret)  		goto out_term_aen_ops;  	changed = nvme_change_ctrl_state(&ctrl->ctrl, NVME_CTRL_LIVE); @@ -3180,6 +3189,9 @@ nvme_fc_create_association(struct nvme_fc_ctrl *ctrl)  out_term_aen_ops:  	nvme_fc_term_aen_ops(ctrl);  out_disconnect_admin_queue: +	dev_warn(ctrl->ctrl.device, +		"NVME-FC{%d}: create_assoc failed, assoc_id %llx ret %d\n", +		ctrl->cnum, ctrl->association_id, ret);  	/* send a Disconnect(association) LS to fc-nvme target */  	nvme_fc_xmt_disconnect_assoc(ctrl);  	spin_lock_irqsave(&ctrl->lock, flags); | 
