diff options
author | Christof Schmitt <christof.schmitt@de.ibm.com> | 2009-08-18 09:43:12 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-09-05 09:49:15 -0400 |
commit | 55c770fa11d21456e02dc7afb9a37404da9c7b4c (patch) | |
tree | 26d0d750f7864f6fec9acf2aa1610757e5417caf /drivers/s390/scsi/zfcp_fc.c | |
parent | 14e242ea55a8b807dc1fb7654941caf68a20cd81 (diff) |
[SCSI] zfcp: Implicitly close all wka ports
An adapter shutdown implicitly closes all open ports. Make sure to
mark all WKA ports as offline, not only the directory server. Also
make sure that no pending wka port work is running when the adapter is
being removed.
Reviewed-by: Swen Schillig <swen@vnet.ibm.com>
Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/s390/scsi/zfcp_fc.c')
-rw-r--r-- | drivers/s390/scsi/zfcp_fc.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/s390/scsi/zfcp_fc.c b/drivers/s390/scsi/zfcp_fc.c index 94c13bd32b5f..6d0fef92567b 100644 --- a/drivers/s390/scsi/zfcp_fc.c +++ b/drivers/s390/scsi/zfcp_fc.c | |||
@@ -132,7 +132,7 @@ static void zfcp_fc_wka_port_init(struct zfcp_wka_port *wka_port, u32 d_id, | |||
132 | INIT_DELAYED_WORK(&wka_port->work, zfcp_wka_port_offline); | 132 | INIT_DELAYED_WORK(&wka_port->work, zfcp_wka_port_offline); |
133 | } | 133 | } |
134 | 134 | ||
135 | void zfcp_fc_wka_port_force_offline(struct zfcp_wka_port *wka) | 135 | static void zfcp_fc_wka_port_force_offline(struct zfcp_wka_port *wka) |
136 | { | 136 | { |
137 | cancel_delayed_work_sync(&wka->work); | 137 | cancel_delayed_work_sync(&wka->work); |
138 | mutex_lock(&wka->mutex); | 138 | mutex_lock(&wka->mutex); |
@@ -140,6 +140,15 @@ void zfcp_fc_wka_port_force_offline(struct zfcp_wka_port *wka) | |||
140 | mutex_unlock(&wka->mutex); | 140 | mutex_unlock(&wka->mutex); |
141 | } | 141 | } |
142 | 142 | ||
143 | void zfcp_fc_wka_ports_force_offline(struct zfcp_wka_ports *gs) | ||
144 | { | ||
145 | zfcp_fc_wka_port_force_offline(&gs->ms); | ||
146 | zfcp_fc_wka_port_force_offline(&gs->ts); | ||
147 | zfcp_fc_wka_port_force_offline(&gs->ds); | ||
148 | zfcp_fc_wka_port_force_offline(&gs->as); | ||
149 | zfcp_fc_wka_port_force_offline(&gs->ks); | ||
150 | } | ||
151 | |||
143 | void zfcp_fc_wka_ports_init(struct zfcp_adapter *adapter) | 152 | void zfcp_fc_wka_ports_init(struct zfcp_adapter *adapter) |
144 | { | 153 | { |
145 | struct zfcp_wka_ports *gs = adapter->gs; | 154 | struct zfcp_wka_ports *gs = adapter->gs; |