diff options
author | Horst Hummel <horst.hummel@de.ibm.com> | 2006-04-27 18:40:10 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-04-28 08:33:48 -0700 |
commit | 39ccf95e28765a08a9e01be614695d7c570b4e77 (patch) | |
tree | 9a381e8e8afcd3d6048aaae6a7635f137b6951da /drivers/s390/block | |
parent | a3ae39c060be57a4936d2c1d970e4d0c7d320d9c (diff) | |
download | op-kernel-dev-39ccf95e28765a08a9e01be614695d7c570b4e77.zip op-kernel-dev-39ccf95e28765a08a9e01be614695d7c570b4e77.tar.gz |
[PATCH] s390: dasd ioctl never returns
The dasd state machine is not designed to enable an unformatted device, since
'unformatted' is a final state. The BIODASDENABLE ioctl calls
dasd_enable_device() which never returns if the device is in this special
state. Return -EPERM in dasd_increase_state for unformatted devices to make
dasd_enable_device terminate. Note: To get such an unformatted device online
it has to be re-analyzed. This means that the device needs to be disabled
prior to re-enablement.
Signed-off-by: Horst Hummel <horst.hummel@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/s390/block')
-rw-r--r-- | drivers/s390/block/dasd.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index a3bfebc..cfb1fff 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c @@ -315,6 +315,11 @@ dasd_increase_state(struct dasd_device *device) rc = dasd_state_basic_to_ready(device); if (!rc && + device->state == DASD_STATE_UNFMT && + device->target > DASD_STATE_UNFMT) + rc = -EPERM; + + if (!rc && device->state == DASD_STATE_READY && device->target >= DASD_STATE_ONLINE) rc = dasd_state_ready_to_online(device); |