[SCSI] zfcp: incorrect reaction on incoming RSCN
After an error condition resolved a remote storage port was never re-opened. The incoming RSCN was not processed accordingly due to a misinterpreted status flag / return value combination. 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:
parent
21ddaa53f9
commit
2409549068
|
@ -145,16 +145,10 @@ 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) {
|
||||
if (!(atomic_read(&port->status) & ZFCP_STATUS_PORT_PHYS_OPEN))
|
||||
/* Try to connect to unused ports anyway. */
|
||||
zfcp_erp_port_reopen(port,
|
||||
ZFCP_STATUS_COMMON_ERP_FAILED,
|
||||
"fcirsc1", fsf_req);
|
||||
else if ((port->d_id & range) == (elem->nport_did & range))
|
||||
/* Check connection status for connected ports */
|
||||
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);
|
||||
}
|
||||
|
||||
read_unlock_irqrestore(&zfcp_data.config_lock, flags);
|
||||
}
|
||||
|
||||
|
@ -381,8 +375,10 @@ static void zfcp_fc_adisc_handler(unsigned long data)
|
|||
if (!port->wwnn)
|
||||
port->wwnn = ls_adisc->wwnn;
|
||||
|
||||
if (port->wwpn != ls_adisc->wwpn)
|
||||
zfcp_erp_port_reopen(port, 0, "fcadh_2", NULL);
|
||||
if ((port->wwpn != ls_adisc->wwpn) ||
|
||||
!(atomic_read(&port->status) & ZFCP_STATUS_COMMON_OPEN))
|
||||
zfcp_erp_port_reopen(port, ZFCP_STATUS_COMMON_ERP_FAILED,
|
||||
"fcadh_2", NULL);
|
||||
|
||||
out:
|
||||
zfcp_port_put(port);
|
||||
|
|
|
@ -1161,10 +1161,6 @@ int zfcp_fsf_send_els(struct zfcp_send_els *els)
|
|||
struct fsf_qtcb_bottom_support *bottom;
|
||||
int ret = -EIO;
|
||||
|
||||
if (unlikely(!(atomic_read(&els->port->status) &
|
||||
ZFCP_STATUS_COMMON_UNBLOCKED)))
|
||||
return -EBUSY;
|
||||
|
||||
spin_lock_bh(&adapter->req_q_lock);
|
||||
if (zfcp_fsf_req_sbal_get(adapter))
|
||||
goto out;
|
||||
|
|
Loading…
Reference in a new issue