[S390] dasd: fix race condition in resume code
authorStefan Haberland <stefan.haberland@de.ibm.com>
Tue, 6 Oct 2009 08:34:15 +0000 (10:34 +0200)
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>
Tue, 6 Oct 2009 08:35:11 +0000 (10:35 +0200)
commit6fca97a958bc3c67566aa91eafc6a5be2e66d6b3
tree9e5ca7c9c3d14c45f469feb58cab15212cee9d6b
parentaf9d2ff9afaae8040dbf09238b2579f92c93579e
[S390] dasd: fix race condition in resume code

There is a race while re-reading the device characteristics. After
cleaning the memory area a cqr is build which reads the device
characteristics. This may take a rather long time and the device
characteristics structure is zero during this. Now it could be
possible that the block tasklet starts working and a new cqr will be
build. The build_cp command refers to the device characteristics
structure and this may lead into a divide by zero exception.
Fix this by re-reading the device characteristics into a temporary
structur and copy the data to the original structure. Also take the
ccwdev_lock.

Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/block/dasd.c
drivers/s390/block/dasd_eckd.c