|
@@ -189,14 +189,12 @@ int dasd_alias_make_device_known_to_lcu(struct dasd_device *device)
|
|
|
unsigned long flags;
|
|
|
struct alias_server *server, *newserver;
|
|
|
struct alias_lcu *lcu, *newlcu;
|
|
|
- int is_lcu_known;
|
|
|
struct dasd_uid uid;
|
|
|
|
|
|
private = (struct dasd_eckd_private *) device->private;
|
|
|
|
|
|
device->discipline->get_uid(device, &uid);
|
|
|
spin_lock_irqsave(&aliastree.lock, flags);
|
|
|
- is_lcu_known = 1;
|
|
|
server = _find_server(&uid);
|
|
|
if (!server) {
|
|
|
spin_unlock_irqrestore(&aliastree.lock, flags);
|
|
@@ -208,7 +206,6 @@ int dasd_alias_make_device_known_to_lcu(struct dasd_device *device)
|
|
|
if (!server) {
|
|
|
list_add(&newserver->server, &aliastree.serverlist);
|
|
|
server = newserver;
|
|
|
- is_lcu_known = 0;
|
|
|
} else {
|
|
|
/* someone was faster */
|
|
|
_free_server(newserver);
|
|
@@ -226,12 +223,10 @@ int dasd_alias_make_device_known_to_lcu(struct dasd_device *device)
|
|
|
if (!lcu) {
|
|
|
list_add(&newlcu->lcu, &server->lculist);
|
|
|
lcu = newlcu;
|
|
|
- is_lcu_known = 0;
|
|
|
} else {
|
|
|
/* someone was faster */
|
|
|
_free_lcu(newlcu);
|
|
|
}
|
|
|
- is_lcu_known = 0;
|
|
|
}
|
|
|
spin_lock(&lcu->lock);
|
|
|
list_add(&device->alias_list, &lcu->inactive_devices);
|
|
@@ -239,64 +234,7 @@ int dasd_alias_make_device_known_to_lcu(struct dasd_device *device)
|
|
|
spin_unlock(&lcu->lock);
|
|
|
spin_unlock_irqrestore(&aliastree.lock, flags);
|
|
|
|
|
|
- return is_lcu_known;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * The first device to be registered on an LCU will have to do
|
|
|
- * some additional setup steps to configure that LCU on the
|
|
|
- * storage server. All further devices should wait with their
|
|
|
- * initialization until the first device is done.
|
|
|
- * To synchronize this work, the first device will call
|
|
|
- * dasd_alias_lcu_setup_complete when it is done, and all
|
|
|
- * other devices will wait for it with dasd_alias_wait_for_lcu_setup.
|
|
|
- */
|
|
|
-void dasd_alias_lcu_setup_complete(struct dasd_device *device)
|
|
|
-{
|
|
|
- unsigned long flags;
|
|
|
- struct alias_server *server;
|
|
|
- struct alias_lcu *lcu;
|
|
|
- struct dasd_uid uid;
|
|
|
-
|
|
|
- device->discipline->get_uid(device, &uid);
|
|
|
- lcu = NULL;
|
|
|
- spin_lock_irqsave(&aliastree.lock, flags);
|
|
|
- server = _find_server(&uid);
|
|
|
- if (server)
|
|
|
- lcu = _find_lcu(server, &uid);
|
|
|
- spin_unlock_irqrestore(&aliastree.lock, flags);
|
|
|
- if (!lcu) {
|
|
|
- DBF_EVENT_DEVID(DBF_ERR, device->cdev,
|
|
|
- "could not find lcu for %04x %02x",
|
|
|
- uid.ssid, uid.real_unit_addr);
|
|
|
- WARN_ON(1);
|
|
|
- return;
|
|
|
- }
|
|
|
- complete_all(&lcu->lcu_setup);
|
|
|
-}
|
|
|
-
|
|
|
-void dasd_alias_wait_for_lcu_setup(struct dasd_device *device)
|
|
|
-{
|
|
|
- unsigned long flags;
|
|
|
- struct alias_server *server;
|
|
|
- struct alias_lcu *lcu;
|
|
|
- struct dasd_uid uid;
|
|
|
-
|
|
|
- device->discipline->get_uid(device, &uid);
|
|
|
- lcu = NULL;
|
|
|
- spin_lock_irqsave(&aliastree.lock, flags);
|
|
|
- server = _find_server(&uid);
|
|
|
- if (server)
|
|
|
- lcu = _find_lcu(server, &uid);
|
|
|
- spin_unlock_irqrestore(&aliastree.lock, flags);
|
|
|
- if (!lcu) {
|
|
|
- DBF_EVENT_DEVID(DBF_ERR, device->cdev,
|
|
|
- "could not find lcu for %04x %02x",
|
|
|
- uid.ssid, uid.real_unit_addr);
|
|
|
- WARN_ON(1);
|
|
|
- return;
|
|
|
- }
|
|
|
- wait_for_completion(&lcu->lcu_setup);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
/*
|