Merge branch 'master' into next
[linux-2.6-block.git] / drivers / s390 / scsi / zfcp_erp.c
index 35364f64da7ff27ce7c740f3bde2a121df3d8556..c557ba34e1aab5b2c5b7d732e9e076620e9dcc94 100644 (file)
@@ -720,7 +720,6 @@ static int zfcp_erp_adapter_strategy_generic(struct zfcp_erp_action *act,
                goto failed_openfcp;
 
        atomic_set_mask(ZFCP_STATUS_COMMON_OPEN, &act->adapter->status);
-       schedule_work(&act->adapter->scan_work);
 
        return ZFCP_ERP_SUCCEEDED;
 
@@ -1186,7 +1185,9 @@ static void zfcp_erp_scsi_scan(struct work_struct *work)
                container_of(work, struct zfcp_erp_add_work, work);
        struct zfcp_unit *unit = p->unit;
        struct fc_rport *rport = unit->port->rport;
-       scsi_scan_target(&rport->dev, 0, rport->scsi_target_id,
+
+       if (rport && rport->port_state == FC_PORTSTATE_ONLINE)
+               scsi_scan_target(&rport->dev, 0, rport->scsi_target_id,
                         scsilun_to_int((struct scsi_lun *)&unit->fcp_lun), 0);
        atomic_clear_mask(ZFCP_STATUS_UNIT_SCSI_WORK_PENDING, &unit->status);
        zfcp_unit_put(unit);
@@ -1282,6 +1283,8 @@ static void zfcp_erp_action_cleanup(struct zfcp_erp_action *act, int result)
        case ZFCP_ERP_ACTION_REOPEN_ADAPTER:
                if (result != ZFCP_ERP_SUCCEEDED)
                        zfcp_erp_rports_del(adapter);
+               else
+                       schedule_work(&adapter->scan_work);
                zfcp_adapter_put(adapter);
                break;
        }