Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee69ab7a authored by Maxim Shchetynin's avatar Maxim Shchetynin Committed by James Bottomley
Browse files

[SCSI] zfcp: fix link down handling during firmware update



Don't check link down payload in case of firmware update.

Signed-off-by: default avatarMaxim Shchetynin <maxim@de.ibm.com>
Signed-off-by: default avatarAndreas Herrmann <aherrman@de.ibm.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 2448c459
Loading
Loading
Loading
Loading
+31 −19
Original line number Diff line number Diff line
@@ -554,6 +554,17 @@ static void
zfcp_fsf_link_down_info_eval(struct zfcp_adapter *adapter,
			     struct fsf_link_down_info *link_down)
{
	if (atomic_test_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED,
	                     &adapter->status))
		return;

	atomic_set_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED, &adapter->status);

	if (link_down == NULL) {
		zfcp_erp_adapter_reopen(adapter, 0);
		return;
	}

	switch (link_down->error_code) {
	case FSF_PSQ_LINK_NO_LIGHT:
		ZFCP_LOG_NORMAL("The local link to adapter %s is down "
@@ -634,10 +645,6 @@ zfcp_fsf_link_down_info_eval(struct zfcp_adapter *adapter,
				link_down->explanation_code,
				link_down->vendor_specific_code);

	if (!atomic_test_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED,
			      &adapter->status)) {
		atomic_set_mask(ZFCP_STATUS_ADAPTER_LINK_UNPLUGGED,
				&adapter->status);
	switch (link_down->error_code) {
	case FSF_PSQ_LINK_NO_LIGHT:
	case FSF_PSQ_LINK_WRAP_PLUG:
@@ -649,7 +656,6 @@ zfcp_fsf_link_down_info_eval(struct zfcp_adapter *adapter,
		zfcp_erp_adapter_failed(adapter);
	}
}
}

/*
 * function:	zfcp_fsf_req_dispatch
@@ -919,24 +925,30 @@ zfcp_fsf_status_read_handler(struct zfcp_fsf_req *fsf_req)
		case FSF_STATUS_READ_SUB_NO_PHYSICAL_LINK:
			ZFCP_LOG_INFO("Physical link to adapter %s is down\n",
				      zfcp_get_busid_by_adapter(adapter));
			zfcp_fsf_link_down_info_eval(adapter,
				(struct fsf_link_down_info *)
				&status_buffer->payload);
			break;
		case FSF_STATUS_READ_SUB_FDISC_FAILED:
			ZFCP_LOG_INFO("Local link to adapter %s is down "
				      "due to failed FDISC login\n",
				      zfcp_get_busid_by_adapter(adapter));
			zfcp_fsf_link_down_info_eval(adapter,
				(struct fsf_link_down_info *)
				&status_buffer->payload);
			break;
		case FSF_STATUS_READ_SUB_FIRMWARE_UPDATE:
			ZFCP_LOG_INFO("Local link to adapter %s is down "
				      "due to firmware update on adapter\n",
				      zfcp_get_busid_by_adapter(adapter));
			zfcp_fsf_link_down_info_eval(adapter, NULL);
			break;
		default:
			ZFCP_LOG_INFO("Local link to adapter %s is down "
				      "due to unknown reason\n",
				      zfcp_get_busid_by_adapter(adapter));
			zfcp_fsf_link_down_info_eval(adapter, NULL);
		};
		zfcp_fsf_link_down_info_eval(adapter,
			(struct fsf_link_down_info *) &status_buffer->payload);
		break;

	case FSF_STATUS_READ_LINK_UP: