[SCSI] zfcp: Changed D_ID left port disabled
If the destination ID (D_ID) of a remote storage port changed, e.g. re-plugged cable on the switch in a different switch port, the port was never (re-)attached within Linux. This patch fixes the broken mapping between the WWPN and the D_ID. Signed-off-by: Swen Schillig <swen@vnet.ibm.com> Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
Родитель
a17c585564
Коммит
ea460a8191
|
@ -895,8 +895,13 @@ static int zfcp_erp_port_strategy_open_common(struct zfcp_erp_action *act)
|
|||
act->step = ZFCP_ERP_STEP_PORT_CLOSING;
|
||||
return ZFCP_ERP_CONTINUES;
|
||||
}
|
||||
/* fall through otherwise */
|
||||
}
|
||||
if (port->d_id && !(p_status & ZFCP_STATUS_COMMON_NOESC)) {
|
||||
port->d_id = 0;
|
||||
_zfcp_erp_port_reopen(port, 0, "erpsoc1", NULL);
|
||||
return ZFCP_ERP_EXIT;
|
||||
}
|
||||
/* fall through otherwise */
|
||||
}
|
||||
return ZFCP_ERP_FAILED;
|
||||
}
|
||||
|
|
|
@ -150,9 +150,14 @@ static void _zfcp_fc_incoming_rscn(struct zfcp_fsf_req *fsf_req, u32 range,
|
|||
struct zfcp_port *port;
|
||||
|
||||
read_lock_irqsave(&zfcp_data.config_lock, flags);
|
||||
list_for_each_entry(port, &fsf_req->adapter->port_list_head, list)
|
||||
list_for_each_entry(port, &fsf_req->adapter->port_list_head, list) {
|
||||
if ((port->d_id & range) == (elem->nport_did & range))
|
||||
zfcp_test_link(port);
|
||||
if (!port->d_id)
|
||||
zfcp_erp_port_reopen(port,
|
||||
ZFCP_STATUS_COMMON_ERP_FAILED,
|
||||
"fcrscn1", NULL);
|
||||
}
|
||||
|
||||
read_unlock_irqrestore(&zfcp_data.config_lock, flags);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче