summaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio/device_fsm.c
diff options
context:
space:
mode:
authorMichael Ernst <mernst@de.ibm.com>2009-09-11 10:28:21 +0200
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2009-09-11 10:29:38 +0200
commit217ee6c64a9589bc5ad4d1c88136fc359d17930b (patch)
tree5a01eaa37365d6efbef12aa1f2c5e04db0e42244 /drivers/s390/cio/device_fsm.c
parentbe7a2ddce66991c05a1c6ad19790289591e53547 (diff)
downloadlinux-217ee6c64a9589bc5ad4d1c88136fc359d17930b.tar.gz
linux-217ee6c64a9589bc5ad4d1c88136fc359d17930b.tar.bz2
linux-217ee6c64a9589bc5ad4d1c88136fc359d17930b.zip
[S390] cio: failing set online/offline processing.
When unit checks trigger sensing the device state is set to W4SENSE until sense completion; then the device state is set back to ONLINE. If a unit check occurs while set online or set offline requests are processed then it might happen that the device's temporary W4SENSE state causes these functions to terminate, leaving the device in an inconsistent state when the state is set back to ONLINE later on so that the device cannot be set online or offline any longer. To solve this, set online/offline and related rollback or error routines are processed only if the device is in a final or DISCONNECTED state. Signed-off-by: Michael Ernst <mernst@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/cio/device_fsm.c')
-rw-r--r--drivers/s390/cio/device_fsm.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/s390/cio/device_fsm.c b/drivers/s390/cio/device_fsm.c
index 9c1452a6b9a1..e728ce447f6e 100644
--- a/drivers/s390/cio/device_fsm.c
+++ b/drivers/s390/cio/device_fsm.c
@@ -905,6 +905,8 @@ ccw_device_w4sense(struct ccw_device *cdev, enum dev_event dev_event)
}
call_handler:
cdev->private->state = DEV_STATE_ONLINE;
+ /* In case sensing interfered with setting the device online */
+ wake_up(&cdev->private->wait_q);
/* Call the handler. */
if (ccw_device_call_handler(cdev) && cdev->private->flags.doverify)
/* Start delayed path verification. */