diff options
Diffstat (limited to 'drivers/s390/scsi')
-rw-r--r-- | drivers/s390/scsi/zfcp_aux.c | 4 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_fc.c | 2 | ||||
-rw-r--r-- | drivers/s390/scsi/zfcp_scsi.c | 22 |
3 files changed, 5 insertions, 23 deletions
diff --git a/drivers/s390/scsi/zfcp_aux.c b/drivers/s390/scsi/zfcp_aux.c index 23b85a03e26a..ed9a8a1517c6 100644 --- a/drivers/s390/scsi/zfcp_aux.c +++ b/drivers/s390/scsi/zfcp_aux.c | |||
@@ -709,10 +709,6 @@ void zfcp_port_dequeue(struct zfcp_port *port) | |||
709 | write_lock_irq(&zfcp_data.config_lock); | 709 | write_lock_irq(&zfcp_data.config_lock); |
710 | list_del(&port->list); | 710 | list_del(&port->list); |
711 | write_unlock_irq(&zfcp_data.config_lock); | 711 | write_unlock_irq(&zfcp_data.config_lock); |
712 | if (port->rport) { | ||
713 | port->rport->dd_data = NULL; | ||
714 | port->rport = NULL; | ||
715 | } | ||
716 | wait_event(port->remove_wq, atomic_read(&port->refcount) == 0); | 712 | wait_event(port->remove_wq, atomic_read(&port->refcount) == 0); |
717 | cancel_work_sync(&port->rport_work); /* usually not necessary */ | 713 | cancel_work_sync(&port->rport_work); /* usually not necessary */ |
718 | zfcp_adapter_put(port->adapter); | 714 | zfcp_adapter_put(port->adapter); |
diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c index 7433da900fab..5c1f12247e42 100644 --- a/drivers/s390/scsi/zfcp_fc.c +++ b/drivers/s390/scsi/zfcp_fc.c | |||
@@ -752,7 +752,7 @@ int zfcp_fc_execute_els_fc_job(struct fc_bsg_job *job) | |||
752 | els_fc_job->els.adapter = adapter; | 752 | els_fc_job->els.adapter = adapter; |
753 | if (rport) { | 753 | if (rport) { |
754 | read_lock_irq(&zfcp_data.config_lock); | 754 | read_lock_irq(&zfcp_data.config_lock); |
755 | port = rport->dd_data; | 755 | port = zfcp_get_port_by_wwpn(adapter, rport->port_name); |
756 | if (port) | 756 | if (port) |
757 | els_fc_job->els.d_id = port->d_id; | 757 | els_fc_job->els.d_id = port->d_id; |
758 | read_unlock_irq(&zfcp_data.config_lock); | 758 | read_unlock_irq(&zfcp_data.config_lock); |
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c index b6177ad2d5bf..3ff726afafc6 100644 --- a/drivers/s390/scsi/zfcp_scsi.c +++ b/drivers/s390/scsi/zfcp_scsi.c | |||
@@ -491,21 +491,6 @@ static void zfcp_set_rport_dev_loss_tmo(struct fc_rport *rport, u32 timeout) | |||
491 | } | 491 | } |
492 | 492 | ||
493 | /** | 493 | /** |
494 | * zfcp_scsi_dev_loss_tmo_callbk - Free any reference to rport | ||
495 | * @rport: The rport that is about to be deleted. | ||
496 | */ | ||
497 | static void zfcp_scsi_dev_loss_tmo_callbk(struct fc_rport *rport) | ||
498 | { | ||
499 | struct zfcp_port *port; | ||
500 | |||
501 | write_lock_irq(&zfcp_data.config_lock); | ||
502 | port = rport->dd_data; | ||
503 | if (port) | ||
504 | port->rport = NULL; | ||
505 | write_unlock_irq(&zfcp_data.config_lock); | ||
506 | } | ||
507 | |||
508 | /** | ||
509 | * zfcp_scsi_terminate_rport_io - Terminate all I/O on a rport | 494 | * zfcp_scsi_terminate_rport_io - Terminate all I/O on a rport |
510 | * @rport: The FC rport where to teminate I/O | 495 | * @rport: The FC rport where to teminate I/O |
511 | * | 496 | * |
@@ -516,9 +501,12 @@ static void zfcp_scsi_dev_loss_tmo_callbk(struct fc_rport *rport) | |||
516 | static void zfcp_scsi_terminate_rport_io(struct fc_rport *rport) | 501 | static void zfcp_scsi_terminate_rport_io(struct fc_rport *rport) |
517 | { | 502 | { |
518 | struct zfcp_port *port; | 503 | struct zfcp_port *port; |
504 | struct Scsi_Host *shost = rport_to_shost(rport); | ||
505 | struct zfcp_adapter *adapter = | ||
506 | (struct zfcp_adapter *)shost->hostdata[0]; | ||
519 | 507 | ||
520 | write_lock_irq(&zfcp_data.config_lock); | 508 | write_lock_irq(&zfcp_data.config_lock); |
521 | port = rport->dd_data; | 509 | port = zfcp_get_port_by_wwpn(adapter, rport->port_name); |
522 | if (port) | 510 | if (port) |
523 | zfcp_port_get(port); | 511 | zfcp_port_get(port); |
524 | write_unlock_irq(&zfcp_data.config_lock); | 512 | write_unlock_irq(&zfcp_data.config_lock); |
@@ -550,7 +538,6 @@ static void zfcp_scsi_rport_register(struct zfcp_port *port) | |||
550 | return; | 538 | return; |
551 | } | 539 | } |
552 | 540 | ||
553 | rport->dd_data = port; | ||
554 | rport->maxframe_size = port->maxframe_size; | 541 | rport->maxframe_size = port->maxframe_size; |
555 | rport->supported_classes = port->supported_classes; | 542 | rport->supported_classes = port->supported_classes; |
556 | port->rport = rport; | 543 | port->rport = rport; |
@@ -663,7 +650,6 @@ struct fc_function_template zfcp_transport_functions = { | |||
663 | .reset_fc_host_stats = zfcp_reset_fc_host_stats, | 650 | .reset_fc_host_stats = zfcp_reset_fc_host_stats, |
664 | .set_rport_dev_loss_tmo = zfcp_set_rport_dev_loss_tmo, | 651 | .set_rport_dev_loss_tmo = zfcp_set_rport_dev_loss_tmo, |
665 | .get_host_port_state = zfcp_get_host_port_state, | 652 | .get_host_port_state = zfcp_get_host_port_state, |
666 | .dev_loss_tmo_callbk = zfcp_scsi_dev_loss_tmo_callbk, | ||
667 | .terminate_rport_io = zfcp_scsi_terminate_rport_io, | 653 | .terminate_rport_io = zfcp_scsi_terminate_rport_io, |
668 | .show_host_port_state = 1, | 654 | .show_host_port_state = 1, |
669 | .bsg_request = zfcp_execute_fc_job, | 655 | .bsg_request = zfcp_execute_fc_job, |