diff options
author | Jan Höppner <hoeppner@linux.vnet.ibm.com> | 2016-10-13 14:31:39 +0300 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2016-10-28 11:09:04 +0300 |
commit | 9f9d53e5bdb4362a73b801176cae49e77bea41fb (patch) | |
tree | 6905495f3538632f731934c83f920eae671892ac /drivers/s390/cio/css.c | |
parent | 9de67725c80cb8a7b34b1932e196d2ed61a08879 (diff) | |
download | linux-9f9d53e5bdb4362a73b801176cae49e77bea41fb.tar.xz |
s390/dasd: Fix locking issue when changing RO attribute
The function dasd_ro_store() calls set_disk_ro() to set the device in
question read-only. Since set_disk_ro() might sleep, we can't call it
while holding a lock. However, we also can't simply check if the device,
block, and gdp references are valid before we call set_disk_ro() because
an offline processing might have been started in the meanwhile which
will destroy those references.
In order to reliably call set_disk_ro() we have to ensure several
things:
- Still check validity of the mentioned references but additionally
check if offline processing is running and bail out accordingly. Also,
do this while holding the device lock.
- To ensure that the block device is still safe after the lock, increase
the open_count while still holding the device lock.
Reviewed-by: Stefan Haberland <sth@linux.vnet.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/cio/css.c')
0 files changed, 0 insertions, 0 deletions