diff options
Diffstat (limited to 'drivers/s390/scsi/zfcp_erp.c')
-rw-r--r-- | drivers/s390/scsi/zfcp_erp.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/drivers/s390/scsi/zfcp_erp.c b/drivers/s390/scsi/zfcp_erp.c index 05c47f6ca924..4682c8b8bd24 100644 --- a/drivers/s390/scsi/zfcp_erp.c +++ b/drivers/s390/scsi/zfcp_erp.c | |||
@@ -3241,9 +3241,13 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter, | |||
3241 | break; | 3241 | break; |
3242 | case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED: | 3242 | case ZFCP_ERP_ACTION_REOPEN_PORT_FORCED: |
3243 | case ZFCP_ERP_ACTION_REOPEN_PORT: | 3243 | case ZFCP_ERP_ACTION_REOPEN_PORT: |
3244 | if (atomic_test_mask(ZFCP_STATUS_PORT_NO_WWPN, | ||
3245 | &port->status)) { | ||
3246 | zfcp_port_put(port); | ||
3247 | break; | ||
3248 | } | ||
3249 | |||
3244 | if ((result == ZFCP_ERP_SUCCEEDED) | 3250 | if ((result == ZFCP_ERP_SUCCEEDED) |
3245 | && !atomic_test_mask(ZFCP_STATUS_PORT_NO_WWPN, | ||
3246 | &port->status) | ||
3247 | && !port->rport) { | 3251 | && !port->rport) { |
3248 | struct fc_rport_identifiers ids; | 3252 | struct fc_rport_identifiers ids; |
3249 | ids.node_name = port->wwnn; | 3253 | ids.node_name = port->wwnn; |
@@ -3264,9 +3268,23 @@ zfcp_erp_action_cleanup(int action, struct zfcp_adapter *adapter, | |||
3264 | port->supported_classes; | 3268 | port->supported_classes; |
3265 | } | 3269 | } |
3266 | } | 3270 | } |
3271 | if ((result != ZFCP_ERP_SUCCEEDED) && port->rport) { | ||
3272 | fc_remote_port_delete(port->rport); | ||
3273 | port->rport = NULL; | ||
3274 | } | ||
3267 | zfcp_port_put(port); | 3275 | zfcp_port_put(port); |
3268 | break; | 3276 | break; |
3269 | case ZFCP_ERP_ACTION_REOPEN_ADAPTER: | 3277 | case ZFCP_ERP_ACTION_REOPEN_ADAPTER: |
3278 | if (result != ZFCP_ERP_SUCCEEDED) { | ||
3279 | struct zfcp_port *port; | ||
3280 | list_for_each_entry(port, &adapter->port_list_head, list) | ||
3281 | if (port->rport && | ||
3282 | !atomic_test_mask(ZFCP_STATUS_PORT_WKA, | ||
3283 | &port->status)) { | ||
3284 | fc_remote_port_delete(port->rport); | ||
3285 | port->rport = NULL; | ||
3286 | } | ||
3287 | } | ||
3270 | zfcp_adapter_put(adapter); | 3288 | zfcp_adapter_put(adapter); |
3271 | break; | 3289 | break; |
3272 | default: | 3290 | default: |