|
@@ -80,28 +80,35 @@ int zfcp_reqlist_isempty(struct zfcp_adapter *adapter)
|
|
|
|
|
|
static void __init zfcp_init_device_configure(char *busid, u64 wwpn, u64 lun)
|
|
static void __init zfcp_init_device_configure(char *busid, u64 wwpn, u64 lun)
|
|
{
|
|
{
|
|
|
|
+ struct ccw_device *ccwdev;
|
|
struct zfcp_adapter *adapter;
|
|
struct zfcp_adapter *adapter;
|
|
struct zfcp_port *port;
|
|
struct zfcp_port *port;
|
|
struct zfcp_unit *unit;
|
|
struct zfcp_unit *unit;
|
|
|
|
|
|
- mutex_lock(&zfcp_data.config_mutex);
|
|
|
|
- read_lock_irq(&zfcp_data.config_lock);
|
|
|
|
- adapter = zfcp_get_adapter_by_busid(busid);
|
|
|
|
- if (adapter)
|
|
|
|
- zfcp_adapter_get(adapter);
|
|
|
|
- read_unlock_irq(&zfcp_data.config_lock);
|
|
|
|
|
|
+ ccwdev = get_ccwdev_by_busid(&zfcp_ccw_driver, busid);
|
|
|
|
+ if (!ccwdev)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ if (ccw_device_set_online(ccwdev))
|
|
|
|
+ goto out_ccwdev;
|
|
|
|
|
|
|
|
+ mutex_lock(&zfcp_data.config_mutex);
|
|
|
|
+ adapter = dev_get_drvdata(&ccwdev->dev);
|
|
if (!adapter)
|
|
if (!adapter)
|
|
- goto out_adapter;
|
|
|
|
- port = zfcp_port_enqueue(adapter, wwpn, 0, 0);
|
|
|
|
- if (IS_ERR(port))
|
|
|
|
|
|
+ goto out_unlock;
|
|
|
|
+ zfcp_adapter_get(adapter);
|
|
|
|
+
|
|
|
|
+ port = zfcp_get_port_by_wwpn(adapter, wwpn);
|
|
|
|
+ if (!port)
|
|
goto out_port;
|
|
goto out_port;
|
|
|
|
+
|
|
|
|
+ zfcp_port_get(port);
|
|
unit = zfcp_unit_enqueue(port, lun);
|
|
unit = zfcp_unit_enqueue(port, lun);
|
|
if (IS_ERR(unit))
|
|
if (IS_ERR(unit))
|
|
goto out_unit;
|
|
goto out_unit;
|
|
mutex_unlock(&zfcp_data.config_mutex);
|
|
mutex_unlock(&zfcp_data.config_mutex);
|
|
- ccw_device_set_online(adapter->ccw_device);
|
|
|
|
|
|
|
|
|
|
+ zfcp_erp_unit_reopen(unit, 0, "auidc_1", NULL);
|
|
zfcp_erp_wait(adapter);
|
|
zfcp_erp_wait(adapter);
|
|
flush_work(&unit->scsi_work);
|
|
flush_work(&unit->scsi_work);
|
|
|
|
|
|
@@ -111,8 +118,10 @@ out_unit:
|
|
zfcp_port_put(port);
|
|
zfcp_port_put(port);
|
|
out_port:
|
|
out_port:
|
|
zfcp_adapter_put(adapter);
|
|
zfcp_adapter_put(adapter);
|
|
-out_adapter:
|
|
|
|
|
|
+out_unlock:
|
|
mutex_unlock(&zfcp_data.config_mutex);
|
|
mutex_unlock(&zfcp_data.config_mutex);
|
|
|
|
+out_ccwdev:
|
|
|
|
+ put_device(&ccwdev->dev);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|