|
@@ -1564,6 +1564,12 @@ static void dasd_eckd_do_validate_server(struct work_struct *work)
|
|
|
static void dasd_eckd_kick_validate_server(struct dasd_device *device)
|
|
|
{
|
|
|
dasd_get_device(device);
|
|
|
+ /* exit if device not online or in offline processing */
|
|
|
+ if (test_bit(DASD_FLAG_OFFLINE, &device->flags) ||
|
|
|
+ device->state < DASD_STATE_ONLINE) {
|
|
|
+ dasd_put_device(device);
|
|
|
+ return;
|
|
|
+ }
|
|
|
/* queue call to do_validate_server to the kernel event daemon. */
|
|
|
schedule_work(&device->kick_validate);
|
|
|
}
|
|
@@ -1993,6 +1999,7 @@ static int dasd_eckd_ready_to_online(struct dasd_device *device)
|
|
|
static int dasd_eckd_online_to_ready(struct dasd_device *device)
|
|
|
{
|
|
|
cancel_work_sync(&device->reload_device);
|
|
|
+ cancel_work_sync(&device->kick_validate);
|
|
|
return dasd_alias_remove_device(device);
|
|
|
};
|
|
|
|
|
@@ -2263,6 +2270,7 @@ static void dasd_eckd_check_for_device_change(struct dasd_device *device,
|
|
|
* and only if not suspended
|
|
|
*/
|
|
|
if (!device->block && private->lcu &&
|
|
|
+ device->state == DASD_STATE_ONLINE &&
|
|
|
!test_bit(DASD_FLAG_OFFLINE, &device->flags) &&
|
|
|
!test_bit(DASD_FLAG_SUSPENDED, &device->flags)) {
|
|
|
/*
|