|
@@ -486,10 +486,12 @@ static void zfcp_set_rport_dev_loss_tmo(struct fc_rport *rport, u32 timeout)
|
|
|
*/
|
|
|
static void zfcp_scsi_dev_loss_tmo_callbk(struct fc_rport *rport)
|
|
|
{
|
|
|
- struct zfcp_port *port = rport->dd_data;
|
|
|
+ struct zfcp_port *port;
|
|
|
|
|
|
write_lock_irq(&zfcp_data.config_lock);
|
|
|
- port->rport = NULL;
|
|
|
+ port = rport->dd_data;
|
|
|
+ if (port)
|
|
|
+ port->rport = NULL;
|
|
|
write_unlock_irq(&zfcp_data.config_lock);
|
|
|
}
|
|
|
|
|
@@ -503,9 +505,18 @@ static void zfcp_scsi_dev_loss_tmo_callbk(struct fc_rport *rport)
|
|
|
*/
|
|
|
static void zfcp_scsi_terminate_rport_io(struct fc_rport *rport)
|
|
|
{
|
|
|
- struct zfcp_port *port = rport->dd_data;
|
|
|
+ struct zfcp_port *port;
|
|
|
+
|
|
|
+ write_lock_irq(&zfcp_data.config_lock);
|
|
|
+ port = rport->dd_data;
|
|
|
+ if (port)
|
|
|
+ zfcp_port_get(port);
|
|
|
+ write_unlock_irq(&zfcp_data.config_lock);
|
|
|
|
|
|
- zfcp_erp_port_reopen(port, 0, "sctrpi1", NULL);
|
|
|
+ if (port) {
|
|
|
+ zfcp_erp_port_reopen(port, 0, "sctrpi1", NULL);
|
|
|
+ zfcp_port_put(port);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static void zfcp_scsi_rport_register(struct zfcp_port *port)
|
|
@@ -534,8 +545,10 @@ static void zfcp_scsi_rport_register(struct zfcp_port *port)
|
|
|
|
|
|
static void zfcp_scsi_rport_block(struct zfcp_port *port)
|
|
|
{
|
|
|
- if (port->rport)
|
|
|
- fc_remote_port_delete(port->rport);
|
|
|
+ struct fc_rport *rport = port->rport;
|
|
|
+
|
|
|
+ if (rport)
|
|
|
+ fc_remote_port_delete(rport);
|
|
|
}
|
|
|
|
|
|
void zfcp_scsi_schedule_rport_register(struct zfcp_port *port)
|