s390/dasd: Fix locking issue when changing EER attribute
authorJan Höppner <hoeppner@linux.vnet.ibm.com>
Wed, 12 Oct 2016 10:51:04 +0000 (12:51 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 28 Oct 2016 08:09:04 +0000 (10:09 +0200)
commit9de67725c80cb8a7b34b1932e196d2ed61a08879
tree3a29c6b57286e62cd550542abcddde4c8fde34bc
parent0f57c97f241b4fc18251fb2b1c499e9f71e93c78
s390/dasd: Fix locking issue when changing EER attribute

The reference to a device in question may get lost when the extended
error reporting (EER) attribute is being enabled/disabled while the
device is set offline at the same time. This is due to missing
refcounting and incorrect locking. Fix this by the following:

- In dasd_eer_store() get the device directly and handle the refcount
  accordingly.
- Move the lock in dasd_eer_enable() up so we can ensure safe
  processing.
- Check if the device is being set offline and return with -EBUSY if so.
- While at it, change the return code from -EPERM to -EMEDIUMTYPE as
  suggested by a FIXME, since that is what we're actually checking.

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>
drivers/s390/block/dasd_devmap.c
drivers/s390/block/dasd_eer.c