aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/scsi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/scsi')
-rw-r--r--drivers/s390/scsi/zfcp_aux.c4
-rw-r--r--drivers/s390/scsi/zfcp_fc.c2
-rw-r--r--drivers/s390/scsi/zfcp_scsi.c22
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 */
497static 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)
516static void zfcp_scsi_terminate_rport_io(struct fc_rport *rport) 501static 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,