[S390] dasd deadlock after state change pending interrupt.
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 20 Sep 2006 13:59:05 +0000 (15:59 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 20 Sep 2006 13:59:05 +0000 (15:59 +0200)
commita00bfd7147c0c5c04a59f7adcb0e6d8948b90a6e
treeffe3eb5ede49bf5a14fe31f3270d917fc4bc9c7a
parent47addc84b450fd5e391ab118e178645cb0bbd89d
[S390] dasd deadlock after state change pending interrupt.

The dasd_device_from_cdev function is called from interrupt context
to get the struct dasd_device associated with a ccw device. The
driver_data of the ccw device points to the dasd_devmap structure
which contains the pointer to the dasd_device structure. The lock
that protects the dasd_devmap structure is acquire with out irqsave.
To prevent the deadlock in dasd_device_from_cdev if it is called
from interrupt context the dependency to the dasd_devmap structure
needs to be removed. Let the driver_data of the ccw device point
to the dasd_device structure directly and use the ccw device lock
to protect the access.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/block/dasd.c
drivers/s390/block/dasd_devmap.c
drivers/s390/block/dasd_int.h