aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/scsi/zfcp_erp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/scsi/zfcp_erp.c')
-rw-r--r--drivers/s390/scsi/zfcp_erp.c22
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: